Python 如何在uWSGI中正确加载Flask应用程序模块?
[编辑] 通过从项目文件夹中启动uwsgi,我成功地加载了flask应用程序模块。我现在有一个问题,nginx没有访问套接字文件的权限(向下滚动到问题的末尾)。如果有人能帮忙的话 [/编辑] 接下来,我将尝试使用和运行我的Flask网站。完全按照教程中的说明操作时,效果很好。我现在想经营我自己的网站。我自己的网站项目结构如下所示:Python 如何在uWSGI中正确加载Flask应用程序模块?,python,nginx,flask,uwsgi,Python,Nginx,Flask,Uwsgi,[编辑] 通过从项目文件夹中启动uwsgi,我成功地加载了flask应用程序模块。我现在有一个问题,nginx没有访问套接字文件的权限(向下滚动到问题的末尾)。如果有人能帮忙的话 [/编辑] 接下来,我将尝试使用和运行我的Flask网站。完全按照教程中的说明操作时,效果很好。我现在想经营我自己的网站。我自己的网站项目结构如下所示: myownproject |-app | -__init__.py |-run.py |-myownproject_nginx.con
myownproject
|-app
| -__init__.py
|-run.py
|-myownproject_nginx.conf
|-myownproject_uwsgi.ini
其中app
加载到\uuuuu init\uuuuuuuuuuuupy
中,如下所示:
app = Flask(__name__)
[uwsgi]
#application's base folder
base = /home/kramer65/myownproject
#python module to import
app = app
module = %(app)
# I disabled these lines below because I don't use a venv (please don't ask)
# home = %(base)/venv
# pythonpath = %(base)
#socket file's location
socket = /home/kramer65/myownproject/%n.sock
#permissions for the socket file
chmod-socket = 666
#the variable that holds the flask application inside the imported module
callable = app
#location of log files
logto = /var/log/uwsgi/%n.log
myownproject_uwsgi.ini看起来像这样:
app = Flask(__name__)
[uwsgi]
#application's base folder
base = /home/kramer65/myownproject
#python module to import
app = app
module = %(app)
# I disabled these lines below because I don't use a venv (please don't ask)
# home = %(base)/venv
# pythonpath = %(base)
#socket file's location
socket = /home/kramer65/myownproject/%n.sock
#permissions for the socket file
chmod-socket = 666
#the variable that holds the flask application inside the imported module
callable = app
#location of log files
logto = /var/log/uwsgi/%n.log
但当我运行这个:
$ uwsgi --ini /home/kramer65/myownproject/myownproject_uwsgi.ini
[uWSGI] getting INI configuration from /home/kramer65/myownproject/myownproject_uwsgi.ini
我在/var/log/uwsgi/myownproject\u uwsgi.log
中获得以下日志:
*** Operational MODE: single process ***
ImportError: No module named app
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 ***
为什么uwsgi找不到我的电话?为什么装载点是空的(='
)?我做错了什么
有人知道我怎样才能让它正常工作吗
[编辑]
好的,我试着在myownproject
project文件夹中运行uwsgi--ini/home/kramer65/myownproject/myownproject\u uwsgi.ini
,解决了这个问题;现在它找到了可调用的,而且似乎工作得很好
尽管如此,我还是得到了502,下一个问题似乎是nginx没有访问套接字文件的权限问题<代码>/var/log/nginx/error.log表示:
2015/10/27 11:40:36[crit]14276#0:*1连接()到
unix:/home/kramer65/myownproject/myownproject\u uwsgi.sock失败(13:
权限被拒绝)连接到上游时,客户端:
80.xxx.xxx.xxx,服务器:localhost,请求:“GET/HTTP/1.1”,上游:
"uwsgi://unix:/home/kramer65/myownproject/myownproject_uwsgi.sock:",
主持人:“52.xx.xx.xxx”
因此,我将chmod socket=666
更改为chmod socket=777
。在执行ls-l
时,我实际上看到套接字文件具有完全权限,但我仍然得到上面粘贴的错误
有什么办法让它工作吗?基本配置只是一个内部变量。您注释掉的部分导致了您的问题 如果不想使用virtualenv并设置pythonpath,请将
base
config更改为chdir
chdir=/home/kramer65/myownproject
在内部,uWSGI将从chdir
运行,而不是从当前目录运行
关于套接字权限问题,nginx用户(可能
www-data
)无权访问您的个人文件夹(/home/kramer65/
)。您必须将套接字设置到另一个文件夹,nginx和uwsgi可以访问该文件夹。我不知道uwsgi,因为我经常使用代理传递,但我不会禁用home和Python路径行。您是否尝试过改用默认的Python位置。”cl上的哪个python可能会有帮助,这确实使我能够从任何位置运行uwsgi
-命令。谢谢但它并没有解决另一个错误,即nginx在myownproject_uwsgi.sock
事件上有一个Permission denied
错误,尽管套接字文件是chmod
ed到777并由kramer65
用户所有。知道我该怎么解决吗?我不知道你的nginx配置,但nginx可能无法访问文件夹,即使它可以访问文件。太棒了!就这样!!亲爱的先生,你让我的一天比以前更加阳光明媚!很高兴知道。此权限拒绝错误可能是第一次部署期间最常见的问题。理解问题后,很容易修复,但nginx不会给您提供好的错误消息。