【问题标题】:How to correctly load Flask app module in uWSGI?如何在 uWSGI 中正确加载 Flask 应用程序模块?
【发布时间】:2016-01-26 17:53:24
【问题描述】:

[编辑]

我设法通过从项目文件夹中启动 uwsgi 来加载烧瓶应用程序模块。我现在有一个 nginx 没有权限访问套接字文件的问题(向下滚动到问题的末尾)。如果有人可以帮忙解决这个问题..?

[/编辑]

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

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

其中app 被加载到__init__.py 中,如下所示:

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,解决了这个问题;它现在找到了可调用的,这似乎工作正常。

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

2015/10/27 11:40:36 [crit] 14276#0: *1 connect() to unix:/home/kramer65/myownproject/myownproject_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 时,我实际上看到套接字文件具有完全权限,但我仍然收到上面粘贴的错误。

有什么想法可以让它发挥作用吗?

【问题讨论】:

  • 我不了解uwsgi,因为我经常使用PRoxy pass,但我不会禁用home和Python路径行。您是否尝试过使用默认的 Python 位置。 cl 上的“which python”可能会有所帮助

标签: python nginx flask uwsgi


【解决方案1】:

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

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

chdir = /home/kramer65/myownproject

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

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

【讨论】:

  • 好吧,这确实使我能够从任何位置运行uwsgi-command。谢谢!但它并没有解决另一个错误,因为 nginx 在myownproject_uwsgi.sock 上有一个Permission denied 错误(请参阅有问题的Edit),尽管套接字文件是chmoded 到777 并由@ 拥有987654333@用户。知道如何解决吗?
  • 我不知道你的 nginx conf,但是 nginx 可能无法访问该文件夹,即使它可以访问该文件。
  • 太棒了!就是这样!!亲爱的先生,您刚刚让我的一天比以前更加阳光明媚!
  • 很高兴知道。此权限被拒绝错误可能是第一次部署期间最常见的问题。明白问题后,很容易修复,但是nginx并没有给你很好的报错信息。
猜你喜欢
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多