Python 如何在uWSGI中正确加载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

[编辑]

通过从项目文件夹中启动uwsgi,我成功地加载了flask应用程序模块。我现在有一个问题,nginx没有访问套接字文件的权限(向下滚动到问题的末尾)。如果有人能帮忙的话

[/编辑]

接下来,我将尝试使用和运行我的Flask网站。完全按照教程中的说明操作时,效果很好。我现在想经营我自己的网站。我自己的网站项目结构如下所示:

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不会给您提供好的错误消息。