Tôi biết thực tế là Flask, ở chế độ gỡ lỗi, sẽ phát hiện các thay đổi đối với các tệp mã nguồn .py và sẽ tải lại chúng khi có yêu cầu mới.Tự động tải lại ứng dụng Flask khi mã nguồn thay đổi
Tôi đã từng thấy điều này trong ứng dụng của tôi mọi lúc. Thay đổi một chút văn bản trong phần @ app.route trang trí trong tệp views.py của tôi và tôi có thể thấy các thay đổi trong trình duyệt khi làm mới.
Nhưng đột nhiên (không thể nhớ những gì đã thay đổi), điều này dường như không hoạt động nữa.
Q: Tôi đang đi sai ở đâu?
Tôi đang chạy trên hệ thống OSX 10.9 với thiết lập VENV bằng Python 2.7. Tôi sử dụng foreman start
trong thư mục gốc của dự án để bắt đầu.
App cấu trúc là như thế này:
[Project Root]
+-[app]
| +-__init__.py
| +- views.py
| +- ...some other files...
+-[venv]
+- config.py
+- Procfile
+- run.py
Các tập tin giống như thế này:
# Procfile
web: gunicorn --log-level=DEBUG run:app
# config.py
contains some app specific configuration information.
# run.py
from app import app
if __name__ == "__main__":
app.run(debug = True, port = 5000)
# __init__.py
from flask import Flask
from flask.ext.login import LoginManager
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.mail import Mail
import os
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
#mail sending
mail = Mail(app)
lm = LoginManager()
lm.init_app(app)
lm.session_protection = "strong"
from app import views, models
# app/views.py
@app.route('/start-scep')
def start_scep():
startMessage = '''\
<html>
<header>
<style>
body { margin:40px 40px;font-family:Helvetica;}
h1 { font-size:40px; }
p { font-size:30px; }
a { text-decoration:none; }
</style>
</header>
<p>Some text</p>
</body>
</html>\
'''
response = make_response(startMessage)
response.headers['Content-Type'] = "text/html"
print response.headers
return response
Tôi đoán là bạn bắt đầu sử dụng 'foreman run' thay vì' python run.py' - Flask không nằm trong tầm kiểm soát khi bạn chạy nó dưới gunicorn và vì vậy nó không thể tự động tải lại. –
@SeanVieira Tôi sử dụng 'foreman start' từ dòng lệnh. Tôi có nên làm 'foreman run python run.py'? – HanSooloo
Có, đó là những gì bạn sẽ muốn làm (rất có thể) - nếu điều đó không hoạt động, hãy sử dụng 'python run.py' để thay thế. –