Saya cenderung menggunakan SQLite ketika melakukan pengembangan Django , tetapi pada server langsung sesuatu yang lebih kuat sering dibutuhkan ( MySQL / PostgreSQL , misalnya). Selalu, ada perubahan lain yang harus dilakukan pada pengaturan Django juga: lokasi / intensitas pencatatan berbeda, jalur media, dll.
Bagaimana Anda mengelola semua perubahan ini untuk membuat penerapan menjadi proses otomatis yang sederhana?
Jawaban:
Pembaruan: django-configurations telah dirilis yang mungkin merupakan pilihan yang lebih baik bagi kebanyakan orang daripada melakukannya secara manual.
Jika Anda lebih suka melakukan sesuatu secara manual, jawaban saya sebelumnya masih berlaku:
Saya memiliki beberapa file pengaturan.
settings_local.py
- konfigurasi khusus host, seperti nama database, jalur file, dll.settings_development.py
- konfigurasi yang digunakan untuk pengembangan, misalnyaDEBUG = True
.settings_production.py
- konfigurasi yang digunakan untuk produksi, misalnyaSERVER_EMAIL
.Saya mengikat ini semua bersama dengan
settings.py
file yang pertama diimporsettings_local.py
, dan kemudian salah satu dari dua lainnya. Ini memutuskan mana yang akan dimuat dengan dua pengaturan di dalamsettings_local.py
-DEVELOPMENT_HOSTS
danPRODUCTION_HOSTS
.settings.py
panggilanplatform.node()
untuk menemukan nama host dari mesin yang menjalankannya, dan kemudian mencari nama host tersebut dalam daftar, dan memuat file pengaturan kedua tergantung pada daftar di mana ia menemukan nama host tersebut.Dengan begitu, satu-satunya hal yang benar-benar perlu Anda khawatirkan adalah menjaga agar
settings_local.py
file tetap mutakhir dengan konfigurasi khusus host, dan yang lainnya ditangani secara otomatis.Lihat contohnya di sini .
sumber
_local
agak membingungkan) dan fakta bahwa Anda tidak menggunakan modul (pengaturan /base.py, settings / local.py, settings / production.py). Akan bijaksana juga untuk menyimpan ini dalam repositori terpisah ... lebih baik lagi, layanan aman yang menyajikan informasi ini dari sumber kanonik (mungkin berlebihan untuk sebagian besar) ... sehingga host baru tidak memerlukan rilis baru..py
file, dan dengan demikian memberikan setiap host akses ke informasi tentang konfigurasi setiap host lain, Anda dapat membuat template manage.py untuk menggunakan pengaturan yang sesuai file dalam konfigurasi penerapan Anda.Secara pribadi, saya menggunakan satu settings.py untuk proyek tersebut, saya baru saja mencari nama hostnya (mesin pengembangan saya memiliki nama host yang dimulai dengan "gabriel" jadi saya hanya punya ini:
lalu di bagian lain saya memiliki hal-hal seperti:
dan seterusnya. Sedikit kurang dapat dibaca, tetapi berfungsi dengan baik dan menghemat keharusan untuk menyulap beberapa file pengaturan.
sumber
Di akhir settings.py saya memiliki yang berikut ini:
Dengan cara ini jika saya ingin mengganti pengaturan default saya hanya perlu meletakkan settings_local.py tepat di sebelah settings.py.
sumber
settings_local
menghasilkanImportError
, iniexcept
akan menelannya secara diam-diam.No module named...
vs.cannot import name...
, tetapi rapuh. Atau, letakkan impor Anda di settings_local.py di blok percobaan dan buat pengecualian yang lebih spesifik:MisconfiguredSettings
atau sesuatu untuk efek itu.Saya memiliki dua file.
settings_base.py
yang berisi pengaturan umum / default, dan yang diperiksa ke kontrol sumber. Setiap penerapan memiliki yang terpisahsettings.py
, yang dijalankanfrom settings_base import *
di awal dan kemudian diganti sesuai kebutuhan.sumber
settings_local.py
melakukan inifrom settings import *
, ini dapat mengganti nilai dalamsettings.py
. (settings_local.py
file harus diimpor di akhirsettings.py
).Cara paling sederhana yang saya temukan adalah:
1) gunakan default settings.py untuk pengembangan lokal dan 2) buat produksi-settings.py dimulai dengan:
Dan kemudian timpa saja pengaturan yang berbeda dalam produksi:
sumber
Sedikit terkait, untuk masalah menyebarkan Django itu sendiri dengan banyak basis data, Anda mungkin ingin melihat Djangostack . Anda dapat mengunduh penginstal gratis yang memungkinkan Anda menginstal Apache, Python, Django, dll. Sebagai bagian dari proses instalasi, kami mengizinkan Anda untuk memilih database mana yang ingin Anda gunakan (MySQL, SQLite, PostgreSQL). Kami menggunakan installer secara ekstensif saat mengotomatiskan penerapan secara internal (mereka dapat dijalankan dalam mode tanpa pengawasan).
sumber
Saya memiliki file settings.py saya di direktori eksternal. Dengan begitu, itu tidak diperiksa ke dalam kontrol sumber, atau ditimpa oleh penerapan. Saya meletakkan ini di file settings.py di bawah proyek Django saya, bersama dengan pengaturan default:
Catatan: Ini sangat berbahaya jika Anda tidak bisa mempercayai local_settings.py.
sumber
Selain beberapa file pengaturan yang disebutkan oleh Jim, saya juga cenderung menempatkan dua pengaturan ke dalam file settings.py saya di bagian atas
BASE_DIR
danBASE_URL
mengatur ke jalur kode dan URL ke dasar situs, semua pengaturan lainnya dimodifikasi untuk menambahkan diri mereka sendiri ke ini.BASE_DIR = "/home/sean/myapp/"
misalnyaMEDIA_ROOT = "%smedia/" % BASEDIR
Jadi saat memindahkan proyek saya hanya perlu mengedit pengaturan ini dan tidak mencari seluruh file.
Saya juga akan merekomendasikan melihat fabric dan Capistrano (alat Ruby, tetapi dapat digunakan untuk menyebarkan aplikasi Django) yang memfasilitasi otomatisasi penyebaran jarak jauh.
sumber
Nah, saya menggunakan konfigurasi ini:
Di akhir settings.py:
Dan di locale_settings.py:
sumber
Begitu banyak jawaban yang rumit!
Setiap file settings.py dilengkapi dengan:
Saya menggunakan direktori itu untuk mengatur variabel DEBUG seperti ini (ganti dengan directoy di mana kode dev Anda):
Kemudian, setiap kali file settings.py dipindahkan, DEBUG akan menjadi False dan itu adalah lingkungan produksi Anda.
Setiap kali Anda membutuhkan pengaturan yang berbeda dari yang ada di lingkungan dev Anda, cukup gunakan:
sumber
Saya pikir itu tergantung pada ukuran situs, apakah Anda perlu meningkatkan dari menggunakan SQLite, saya telah berhasil menggunakan SQLite di beberapa situs langsung yang lebih kecil dan itu berjalan dengan baik.
sumber
Saya menggunakan lingkungan:
Saya yakin ini adalah pendekatan yang jauh lebih baik, karena pada akhirnya Anda memerlukan pengaturan khusus untuk lingkungan pengujian Anda, dan Anda dapat dengan mudah menambahkannya ke kondisi ini.
sumber
Ini adalah posting yang lebih lama tetapi saya pikir jika saya menambahkan ini berguna
library
itu akan menyederhanakan banyak hal.Gunakan django-configuration
Mulai cepat
Kemudian buat subkelas dari kelas configurations.Configuration yang disertakan dalam proyek Anda settings.py atau modul lain yang Anda gunakan untuk menyimpan konstanta pengaturan, misalnya:
Setel
DJANGO_CONFIGURATION
variabel lingkungan ke nama kelas yang baru saja Anda buat, misalnya di~/.bashrc
:export DJANGO_CONFIGURATION=Dev
dan
DJANGO_SETTINGS_MODULE
variabel lingkungan ke jalur impor modul seperti biasa, misalnya di bash:export DJANGO_SETTINGS_MODULE=mysite.settings
Alternatifnya sediakan
--configuration
opsi saat menggunakan perintah manajemen Django sepanjang--settings
baris opsi baris perintah bawaan Django , misalnya:python manage.py runserver --settings=mysite.settings --configuration=Dev
Untuk mengaktifkan Django untuk menggunakan konfigurasi Anda sekarang harus mengubah Anda manage.py atau wsgi.py script untuk menggunakan versi Django-konfigurasi fungsi pemula yang tepat, misalnya khas manage.py menggunakan Django-konfigurasi akan terlihat seperti ini:
Perhatikan pada baris 10 kami tidak menggunakan alat umum
django.core.management.execute_from_command_line
melainkanconfigurations.management.execute_from_command_line
.Hal yang sama berlaku untuk file wsgi.py Anda , misalnya:
Di sini kami tidak menggunakan
django.core.wsgi.get_wsgi_application
fungsi default melainkanconfigurations.wsgi.get_wsgi_application
.Itu dia! Anda sekarang dapat menggunakan proyek Anda dengan manage.py dan server berkemampuan WSGI favorit Anda.
sumber
Bahkan Anda mungkin harus mempertimbangkan untuk memiliki konfigurasi yang sama (atau hampir sama) untuk lingkungan pengembangan dan produksi Anda. Jika tidak, situasi seperti "Hai, ini berfungsi di mesin saya" akan terjadi dari waktu ke waktu.
Jadi untuk mengotomatiskan penerapan Anda dan menghilangkan masalah WOMM tersebut, cukup gunakan Docker .
sumber