Python uwsgi和烧瓶应用程序给出;找不到可调用或导入错误“;

Python uwsgi和烧瓶应用程序给出;找不到可调用或导入错误“;,python,nginx,flask,uwsgi,Python,Nginx,Flask,Uwsgi,我想使用Python3和nginx在virtualenv中提供一个基本的Flask应用程序。我发现了错误 内部服务器错误 当我尝试浏览到该页面时。我还看到/var/log/uwsgi/app/myproj.log中的错误,这让我相信错误在我的uwsgi配置文件中。nginx和uwsgi似乎沟通得很好 以下是我的目录结构: /srv/http/myproj/ |----- setup.py |----- env/ |--

我想使用Python3和nginx在virtualenv中提供一个基本的Flask应用程序。我发现了错误

内部服务器错误

当我尝试浏览到该页面时。我还看到
/var/log/uwsgi/app/myproj.log
中的错误,这让我相信错误在我的uwsgi配置文件中。nginx和uwsgi似乎沟通得很好

以下是我的目录结构:

/srv/http/myproj/
             |----- setup.py
             |----- env/
             |----- myproj/
                       |----- __init__.py
                       |----- myproj.py
/etc/uwsgi/apps-enabled/
                 |----- myproj.ini
/etc/nginx/sites-enabled/
                 |----- myproj
下面是我在
/var/log/uwsgi/app/myproj.log
中看到的错误:

Thu Jun  8 00:00:41 2017 - *** Operational MODE: preforking ***
Thu Jun  8 00:00:41 2017 - unable to load app 0 (mountpoint='') (callable not found or import error)
Thu Jun  8 00:00:41 2017 - *** no app loaded. going in full dynamic mode ***
Thu Jun  8 00:00:41 2017 - *** uWSGI is running in multiple interpreter mode ***
Thu Jun  8 00:00:41 2017 - spawned uWSGI master process (pid: 14498)
Thu Jun  8 00:00:41 2017 - spawned uWSGI worker 1 (pid: 14504, cores: 1)
Thu Jun  8 00:00:41 2017 - spawned uWSGI worker 2 (pid: 14505, cores: 1)
Thu Jun  8 00:00:43 2017 - --- no python application found, check your startup logs for errors ---
[pid: 14505|app: -1|req: -1/1] 172.16.72.2 () {46 vars in 726 bytes} [Thu Jun  8 00:00:43 2017] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
下面是
/etc/uwsgi/apps enabled/myproj.ini

[uwsgi]
plugins = python3
venv = /srv/http/myproj/env
chdir = /srv/http/myproj
module = myproj:myproj
callable = app
我还尝试将
module
设置为
myproj
(这在uwsgi日志中没有更改)和
myproj.myproj
(由于找不到模块
myproj.myproj
,所以不太成功)

下面是
/srv/http/myproj/myproj/myproj.py

import flask
app = flask.Flask(__name__)
from myproj.myproj import app
下面是
/srv/http/myproj/myproj/\uuuu init\uuuuu.py

import flask
app = flask.Flask(__name__)
from myproj.myproj import app
下面是
/etc/nginx/sites enabled/myproj

upstream myproj {
        server unix:///run/uwsgi/app/myproj/socket fail_timeout=0;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name _;

        location / {
                uwsgi_pass myproj;
                include /etc/nginx/uwsgi_params;
        }
}
我想我的问题很简单:我做错了什么

编辑:如果重要:

# lsb_release -d
Description:    Ubuntu 16.04.2 LTS

在看了一个结构类似的项目后,我找到了解决方案。以下是解决问题的新文件:

[uwsgi]
plugins = python3
venv = /srv/http/myproj/env
chdir = /srv/http/myproj/myproj
pythonpath = ..
module = myproj
callable = app
本质上,我需要我的chdir更深一层(因此模块更深一层)


编辑:最后,为了使我在项目中的导入正常工作,我还需要添加上面看到的pythonpath行。

请检查uwsgi进程是否具有wsgi.py的读取权限。

在没有uwsgi的情况下运行flask应用程序吗?然后只使用uwsgi?@Nurzhan是的,我可以在没有uwsgi的情况下运行Flask应用程序,并通过浏览器访问它。我不太清楚你说的uwsgi到底是什么意思,但是当我运行
uwsgi--ini/etc/uwsg/apps available/myproj.ini--socket/run/uwsgi/app/myproj/socket
时,我从nginx得到了一个
502坏网关
错误,因为
(13:权限被拒绝)连接到上游时
。您可以使用uwsgi启动应用程序,仅查看服务器是否正确地为您的应用程序提供服务。我使用gunicorn+nginx,当nginx发出502错误时,它通常发生在gunicorn未在后端运行时。检查是否可以正确启动uwsgi。uwsgi确实会使用我之前评论中的命令自动启动,而不会自动结束。输出中也没有明显的错误(它似乎是写入标准输出而不是日志)。似乎没有任何错误,但我不熟悉连接到uwsgi创建的UNIX套接字并手动从中请求HTTP资源的过程,而不需要web服务器代表客户端发送HTTP GET。我刚刚用
GET/HTTP/1.0
尝试了
socat-UNIX-CONNECT:/run/uwsgi/app/myproj/socket
,结果出现了错误
管道破裂
可能没有什么帮助,但试着看一下本教程-你救了我一天!