Flask 및 uWSGI-앱 0을로드 할 수 없음 (mountpoint = '') (호출 가능을 찾을 수 없음 또는 가져 오기 오류)
uWSGI를 사용하여 Flask를 시작하려고하면 아래 오류가 발생합니다. 시작하는 방법은 다음과 같습니다.
> # cd ..
> root@localhost:# uwsgi --socket 127.0.0.1:6000 --file /path/to/folder/run.py --callable app - -processes 2
내 디렉토리 구조는 다음과 같습니다.
-/path/to/folder/run.py
-|app
-|__init__.py
-|views.py
-|templates
-|static
내용 /path/to/folder/run.py
if __name__ == '__main__':
from app import app
#app.run(debug = True)
app.run()
내용 /path/to/folder/app/__init__.py
import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
#from flaskext.babel import Babel
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
#app.config.from_pyfile('babel.cfg')
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.setup_app(app)
login_manager.login_view = 'login'
login_manager.login_message = u"Please log in to access this page."
from app import views
*** Operational MODE: preforking ***
unable to find "application" callable in file /path/to/folder/run.py
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (pid: 26972, cores: 1)
spawned uWSGI worker 2 (pid: 26973, cores: 1)
uWSGI는 앱을로로드하지 않으므로 __main__
를 찾지 못합니다 app
(앱이 이름으로 실행될 때만로드되므로 __main__
). 따라서 if __name__ == "__main__":
블록 외부로 가져와야합니다 .
정말 간단한 변경 :
from app import app
if __name__ == "__main__":
app.run()
이제 앱을 직접 python run.py
실행하거나 uWSGI를 통해 실행할 수 있습니다.
내 플라스크 앱이라는 변수에 있었기 때문에 허용 된 솔루션에 문제가있었습니다 app
. wsgi에 이것을 넣어서 해결할 수 있습니다.
from module_with_your_flask_app import app as application
그래서 문제는 단순히 uwsgi가라는 변수를 기대한다는 것 application
입니다.
The uWSGI error unable to load app 0 (mountpoint='') (callable not found or import error)
occured for me if I left out the last two lines of the following minimal working example for Flask application
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello world!"
if __name__ == "__main__":
app.run()
else:
application = app
I am aware that this already implicitly said within the comments to another answer, but it still took me a while to figure that out, so I hope to save others' time.
In the case of a pure Python Dash application, I can offer the following minimal viable code snippet:
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div( html.H1(children="Hello World") )
application = app.server
if __name__ == "__main__":
app.run_server(debug=True)
Again, the application = app.server
is the essential part here.
'programing tip' 카테고리의 다른 글
10 미만은 숫자에 0을 더합니다. (0) | 2020.11.29 |
---|---|
비트 맵에 대한 Android 공유 의도-공유 전에 저장하지 않을 수 있습니까? (0) | 2020.11.29 |
DateTime을 TimeSpan으로 변환 (0) | 2020.11.29 |
UIButton 하위 클래스를 초기화하는 방법은 무엇입니까? (0) | 2020.11.29 |
mysql2 gem으로 앱을 설치하려고 할 때 오류 발생 (0) | 2020.11.29 |