【发布时间】:2018-06-21 10:36:51
【问题描述】:
我正在学习如何通过构建最简单的“Hello, Word!”在 Ubuntu 16.04 服务器上使用 apache2.4 和 mod_wsgi 部署烧瓶应用程序。应用程序,但我遇到了与我的 wsgi 文件相关的奇怪语法错误,我被难住了。
Apache 似乎运行良好,但是当我点击应用程序的域时,我收到 apache 的标准 500 错误,并且日志列出以下内容:
[wsgi:error] [pid 28427:tid 140540431517440] mod_wsgi (pid=28427): Target WSGI script '/var/www/myapp.domain.com/myapp.wsgi' cannot be loaded as Python module.
[wsgi:error] [pid 28427:tid 140540431517440] mod_wsgi (pid=28427): Exception occurred processing WSGI script '/var/www/myapp.domain.com/myapp.wsgi'.
[wsgi:error] [pid 28427:tid 140540431517440] Traceback (most recent call last):
[wsgi:error] [pid 28427:tid 140540431517440] File "/var/www/myapp.domain.com/myapp.wsgi", line 5, in <module>
[wsgi:error] [pid 28427:tid 140540431517440] exec(file_.read(), dict(__file__=activate_this))
[wsgi:error] [pid 28427:tid 140540431517440] File "<string>", line 4
[wsgi:error] [pid 28427:tid 140540431517440] deactivate () {
[wsgi:error] [pid 28427:tid 140540431517440] ^
[wsgi:error] [pid 28427:tid 140540431517440] SyntaxError: invalid syntax
日志中引用的语法错误指向我的虚拟环境激活脚本中的代码,该脚本位于 ./venv/bin/activate
我想知道我使用 venv 模块与 virtualenv 是否会导致此问题
这是我的应用程序 wsgi 文件的内容(测试是烧瓶实例化的模块名称):
#!/usr/bin/python3
activate_this = '/var/www/myapp.domain.com/venv/bin/activate'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
import sys
sys.path.insert(0, '/var/www/myapp.domain.com')
from test import app as application
【问题讨论】:
-
你为什么要
exec那个文件作为 Python 代码?这显然不是 Python 代码。 -
您是否尝试从正在运行的 Python 脚本中激活 virtualenv?
activate脚本是 shell 脚本,不是 Python 代码,反正激活 virtualenv 已经来不及了。 -
我也对此感到困惑。我知道这是shell脚本。我在烧瓶网站上关注documentation 来配置 .wsgi 文件。很底。我开始认为它只是为 virtualenv 而不是 venv 编写的
-
那是
activate_this.py,而不是activate(显然virtualenv 确实尝试支持在正在运行的解释器中激活,尽管它确实有一些警告让我认为他们不会支持它)。
标签: python flask mod-wsgi apache2.4