Flask uwsgi:未加载应用程序。以全动态模式运行

Flask uwsgi:未加载应用程序。以全动态模式运行,flask,uwsgi,Flask,Uwsgi,在我的uwsgi配置中,我有以下选项: [uwsgi] chmod-socket = 777 socket = 127.0.0.1:9031 plugins = python pythonpath = /adminserver/ callable = app master = True processes = 4 reload-mercy = 8 cpu-affinity = 1 max-requests = 2000 limit-as = 512 reload-on-as = 256 relo

在我的uwsgi配置中,我有以下选项:

[uwsgi]
chmod-socket = 777
socket = 127.0.0.1:9031
plugins = python
pythonpath = /adminserver/
callable = app
master = True
processes = 4
reload-mercy = 8
cpu-affinity = 1
max-requests = 2000
limit-as = 512
reload-on-as = 256
reload-on-rss = 192
no-orphans
vacuum
我的应用程序结构如下所示:

/adminserver
   app.py
   ...
/some-dir
    module1.py
    module2.py
My
app.py
包含以下代码位:

app = Flask(__name__)
...

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5003, debug=True)
结果是,当我尝试卷曲服务器时,出现以下错误:

Wed Sep 11 23:28:56 2013 - added /adminserver/ to pythonpath.
Wed Sep 11 23:28:56 2013 - *** no app loaded. going in full dynamic mode ***
Wed Sep 11 23:28:56 2013 - *** uWSGI is running in multiple interpreter mode ***
模块
可调用
选项的作用是什么?文件说:

模块,wsgi参数:字符串

将WSGI模块作为应用程序加载。模块(sans.py)必须是 重要的,重要的

可以从命令行使用-w设置此选项

可调用参数:字符串默认值:应用程序

设置默认WSGI可调用名称

模块 Python中的一个模块映射到磁盘上的一个文件-当您有这样一个目录时:

/adminserver
   app.py
   ...
/some-dir
    module1.py
    module2.py
如果在当前工作目录为
/some dir
时启动python解释器,则可以导入每个模块:

some-dir$ python
>>> import module1, module2
# Module1 and Module2 are now imported
Python搜索与您试图导入的名称匹配的文件。uwsgi在幕后使用Python的导入过程来加载包含WSGI应用程序的模块

可调用 WSGI PEP(和)指定WSGI应用程序:

uwsgi需要知道模块内映射到WSGI应用程序可调用的符号的名称,以便它可以在环境中传递,并且
start\u响应
callable-基本上,它需要能够执行以下操作:

wsgi_app = getattr(simple_wsgi, 'simple_app')
TL;PC(太长;首选代码) uwsgi正在做的一个简单的类比:

# Use `module` to know *what* to import
import simple_wsgi

# construct request environment from user input
# create a callable to pass for start_response
# and then ...

# use `callable` to know what to call
wsgi_app = getattr(simple_wsgi, 'simple_app')

# and then call it to respond to the user
response = wsgi_app(environ, start_response)

对于其他有此问题的人,如果您确定您的配置是正确的,您应该检查您的uWSGI版本


Ubuntu 12.04 LTS提供了1.0.3版本。删除它并使用pip安装2.0.4解决了我的问题。

首先,检查您的配置是否正确

我的
uwsgi.ini
配置:

[uwsgi]
chdir=/home/air/repo/Qiy
uid=nobody
gid=nobody
module=Qiy.wsgi:application
socket=/home/air/repo/Qiy/uwsgi.sock
master=true
workers=5
pidfile=/home/air/repo/Qiy/uwsgi.pid
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=4096
daemonize=/home/air/repo/Qiy/uwsgi.log
然后使用
uwsgi--ini-uwsgi.ini
运行uwsgi

如果不工作,请
rm-rf
进入
venv
目录,重新初始化venv,然后重试我的步骤


我重新初始化了
venv
解决了我的问题,问题似乎是当我
pip3安装
requirements.txt
的一些软件包时,升级了pip,然后安装
uwsgi
软件包。因此,我删除了
venv
,并重新初始化了我的虚拟环境。

您当前的配置似乎没有
module
wsgi
键……我的
uwsgi
配置文件中定义的
module
是否应该是包含
simple\u app
wgsi应用程序的python文件?它不起作用,但我不确定
uwsgi
如何在错误中找到它所指的应用程序,
未加载应用程序
@RosePerrone-据我所知,是
模块
应该与要导入的磁盘上的文件名匹配。错误消息不是指应用程序,而是指缺少应用程序,它只是使用通用名称。