繁体   English   中英

如何在uWSGI中正确加载Flask app模块?

[英]How to correctly load Flask app module in uWSGI?

[编辑]

我设法通过从项目文件夹中启动uwsgi来加载烧瓶app模块。 我现在有一个问题,即nginx没有对套接字文件的权限(向下滚动到问题的结尾)。 如果有人可以提供帮助..?

[/编辑]

本教程之后,我正在尝试使用uWSGInginx运行我的Flask网站。 完全按照教程说的那样工作正常。 我现在想要运行自己的网站。 我自己的网站项目的结构如下:

myownproject
   |-app
       | -__init__.py
   |-run.py
   |-myownproject_nginx.conf
   |-myownproject_uwsgi.ini

__init__.py加载app方式如下:

app = Flask(__name__)

和myownproject_uwsgi.ini看起来像这样:

[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_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找不到我的可赎回权? 为什么mountpoint空( ='' )? 我在这做错了什么?

有谁知道我怎么能让它正常工作?

[编辑]

好的,我尝试在myownproject项目文件夹中运行uwsgi --ini /home/kramer65/myownproject/myownproject_uwsgi.ini myownproject ,这解决了这个问题; 它现在找到可调用的,似乎工作正常。

我仍然得到502,下一个问题似乎是nginx没有对套接字文件的权限的权限问题。 /var/log/nginx/error.log说:

2015/10/27 11:40:36 [暴击] 14276#0:* 1连接()到unix:/home/kramer65/myownproject/myownproject_uwsgi.sock失败(13:权限被拒绝)连接上游时,客户端:80 .xxx.xxx.xxx,server:localhost,request:“GET / HTTP / 1.1”,上游:“uwsgi:// unix:/home/kramer65/myownproject/myownproject_uwsgi.sock:”,host:“52.xx。 xx.xxx”

所以我将chmod-socket = 666更改为chmod-socket = 777 在执行ls -l我实际上看到套接字文件具有完全权限,但我仍然得到上面粘贴的错误。

任何想法让这个工作?

base配置只是一个内部变量。 您注释掉的部分导致了您的问题。

如果您不想使用virtualenv并设置pythonpath,请将base配置更改为chdir

chdir = /home/kramer65/myownproject

在内部,uWSGI将从chdir而不是从当前目录运行。

关于套接字权限问题,nginx用户(可能是www-data )无法访问您的个人文件夹( /home/kramer65/ )。 您必须将套接字设置为另一个文件夹,其中nginx和uwsgi可以访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM