Saya sedang menyelidiki bagaimana mengembangkan aplikasi web yang layak dengan Python. Karena saya tidak ingin beberapa struktur tingkat tinggi menghalangi saya, pilihan saya jatuh pada kerangka Flask yang ringan . Waktu akan memberi tahu apakah ini pilihan yang tepat.
Jadi, sekarang saya telah menyiapkan server Apache dengan mod_wsgi, dan situs pengujian saya berjalan dengan baik. Namun, saya ingin mempercepat pengembangan rutin dengan membuat situs secara otomatis memuat ulang setiap perubahan dalam file py atau template yang saya buat. Saya melihat bahwa setiap perubahan pada file .wsgi situs menyebabkan reload (bahkan tanpa WSGIScriptReloading Aktif pada file konfigurasi apache), tetapi saya masih harus mendorongnya secara manual (mis., Masukkan linebreak tambahan, simpan). Apakah ada cara bagaimana menyebabkan memuat ulang ketika saya mengedit beberapa file py aplikasi? Atau, saya diharapkan menggunakan IDE yang menyegarkan file .wsgi untuk saya?
flask run
juga berfungsi, karena ketika Andapip install flask
, sebuah file executable flask juga diinstal divenv/bin/
folder.Jika Anda berbicara tentang lingkungan uji / dev, maka gunakan saja opsi debug. Ini akan memuat ulang aplikasi labu secara otomatis ketika terjadi perubahan kode.
Atau, dari shell:
http://flask.pocoo.org/docs/quickstart/#debug-mode
sumber
Dalam lingkungan uji / pengembangan
The debugger werkzeug sudah memiliki fungsi 'auto reload' yang tersedia yang dapat diaktifkan dengan melakukan salah satu dari yang berikut:
atau
Anda juga dapat menggunakan file konfigurasi terpisah untuk mengelola semua pengaturan Anda jika perlu. Misalnya saya menggunakan 'settings.py' dengan opsi 'DEBUG = True'. Mengimpor file ini juga mudah;
Namun ini tidak cocok untuk lingkungan produksi.
Lingkungan produksi
Secara pribadi saya memilih Nginx + uWSGI daripada Apache + mod_wsgi untuk beberapa alasan kinerja tetapi juga opsi konfigurasi. Opsi sentuh-reload memungkinkan Anda menentukan file / folder yang akan menyebabkan aplikasi uWSGI memuat ulang aplikasi labu Anda yang baru digunakan.
Misalnya, skrip pembaruan Anda menarik perubahan terbaru ke bawah dan menyentuh file 'reload_me.txt'. Skrip uWSGI Anda ini (yang disimpan oleh Supervisord - jelas) memiliki baris ini di suatu tempat:
Saya harap ini membantu!
sumber
.ini
file konfigurasi uwsgi terpisah . Jika Anda membaca dokumentasi tentang "touch-reload" itu ada di konfigurasi uWSGI, bukan supervisor,.app.run(debug=True)
gagal, tetapi pengaturan variabel lingkungan berfungsi.Jika Anda menggunakan uwsgi lihat opsi pengisian ulang python:
Contoh uwsgi-dev-example.ini:
site_root / __ init__.py
Lalu lari:
Catatan: Contoh ini juga memungkinkan debugger.
Saya menempuh rute ini untuk meniru produksi sedekat mungkin dengan pengaturan nginx saya. Cukup menjalankan aplikasi labu dengan itu dibangun di server web di belakang nginx itu akan menghasilkan kesalahan gateway yang buruk.
sumber
Beberapa pembaruan untuk Flask 1.0 dan lebih tinggi
pendekatan dasar untuk memuat ulang panas adalah:
FLASK_ENV=development
(bukanFLASK_DEBUG=1
)flask run --debugger
hanya untuk memastikan itu dihidupkanFLASK_APP
danFLASK_ENV
jika Anda memiliki.env
file di root proyek dan telah menginstal python-dotenvsumber
export FLASK_ENV=development
bekerja untukku.app.run(debug=True)
tampaknya tidak berfungsi.Saya mendapat ide yang berbeda:
Pertama:
Pasang
python-dotenv
modul, yang akan membaca preferensi lokal untuk lingkungan proyek Anda.Kedua:
Tambahkan
.flaskenv
file di direktori proyek Anda. Tambahkan kode berikut:Selesai!
Dengan konfigurasi ini untuk proyek Flask Anda, ketika Anda menjalankan
flask run
dan Anda akan melihat output ini di terminal Anda:Dan ketika Anda mengedit file Anda, simpan saja perubahannya. Anda akan melihat auto-reload ada untuk Anda:
Dengan lebih banyak penjelasan:
Tentu saja Anda dapat menekan secara manual
export FLASK_ENV=development
setiap kali Anda butuhkan. Tetapi menggunakan file konfigurasi yang berbeda untuk menangani lingkungan kerja yang sebenarnya sepertinya solusi yang lebih baik, jadi saya sangat merekomendasikan metode ini yang saya gunakan.sumber
FLASK_APP
variabel ke dalam.flaskenv
file.Aplikasi flask secara opsional dapat dijalankan dalam mode debug. Dalam mode ini, dua modul server pengembangan yang sangat nyaman yang disebut reloader dan debugger diaktifkan secara default. Ketika reloader diaktifkan, Flask mengawasi semua file kode sumber proyek Anda dan secara otomatis me-restart server ketika ada file yang dimodifikasi.
Secara default, mode debug dinonaktifkan. Untuk mengaktifkannya, setel
FLASK_DEBUG=1
variabel lingkungan sebelum menggunakan laburun
:Menjalankan server dengan reloader diaktifkan sangat berguna selama pengembangan, karena setiap kali Anda memodifikasi dan menyimpan file sumber, server secara otomatis me-restart dan mengambil perubahan.
sumber
Untuk mencapai ini di PyCharm setel bagian 'Variabel Lingkungan' ke:
Untuk Flask 'jalankan / konfigurasi debug'.
sumber
$ env: Flask_ENV = "MyAPP.py"
$ env: Flask_ENV = "development"
lari termos
Itu harus bekerja
sumber