【发布时间】:2015-11-11 06:52:44
【问题描述】:
尊敬的 SO 用户您好,欢迎来到我的第一个 SO 问题,
我目前正在寻找使用 Apache 和 mod_wsgi 部署 Flask 应用程序。一切都是用 Python 3.4 编码的,所以我必须遵循几个 tutorials / questions 才能让 mod_wsgi 使用我的 Python 版本(因为 apt-get install 为您提供与 Python 2.7 兼容的 3.4 版本,您必须在 Python 3 virtualenv 中使用 pip 获取后编译它,使其成为 4.x 版本。
Apache 服务器 error.log 显示 Apache/2.4.10 (Debian) mod_wsgi/4.4.13 Python/3.4.2 configured,所以这似乎工作正常。
我的问题在于.wsgi文件中的应用程序的导入。考虑到他们的文件树,教程such as this one 通常会使用from FlaskApp import app as application,这可以在最小的应用程序中正常工作,我尝试过没有任何问题。
我的应用程序稍微复杂一些,并使用 manage.py 文件在 localhost 上运行,这可能是尝试在 Apache 上部署时出现问题的一部分。
根据我在无数 SO Questions 和其他网站的问题中发现的内容,这很可能来自:
- 权限问题(如果执行当前脚本的用户没有读取他要导入的脚本的权限)
-
sys.path问题(如果顶级文件夹不在sys.path中,Python 3 看不到)
主要是出于沮丧,我最终在 /var/www/ 中使用了chmod 744 LongAppName,从而获得了 drwxrwxr-x 权限。
我的文件树如下:
drwxrwxr-x LongAppName
drwxr-xr-x LongAppName
drwxr--r-- ShorterAppName
-rw-r--r-- app.py
-rw-r--r-- commands.py
-rw-r--r-- __init__.py
drwxr--r-- static
drwxr--r-- templates
<irrelevant files>
-rw-r--r-- __init__.py
-rw-r--r-- manage.py
drwxr-xr-x venv
<more irrelevent files>
-rwxr-xr-x longappname.wsgi
所以对于第一个可能的修复,权限对我来说似乎很好。关于第二个,我在 .wsgi 文件中打印 sys.path 并输出 ['/var/www/LongAppName', <among others>] ,这表明顶级文件夹 is 在 sys.path 中。
我的longappname.wsgi如下:
#!/var/www/LongAppName/LongAppName/venv/bin/python3
import os, sys, logging
#Doing some prints to check if we're in the venv and such.
PROJECT_DIR = '/var/www/LongAppName/'
if PROJECT_DIR not in sys.path:
sys.path.insert(0, PROJECT_DIR)
def execfile(filename):
globals = dict( __file__ = filename )
exec( open(filename).read(), globals )
activate_this = os.path.join( PROJECT_DIR+'LongAppName/', 'venv/bin', 'activate_this.py' )
execfile( ativate_this )
#Printing sys.path and sys.executable here
logging.basicConfig(stream=sys.stderr)
from LongAppName.ShorterAppName.app import manager as application
#The previous line changed a lot, I tried importing app, changing the path but this one was the first one I wrote.
Python 似乎找不到 LongAppName.ShorterAppName.app,我不知道为什么。
根据我为测试我最初编写的代码的不同替代方案所做的尝试次数,我开始忘记什么是好的以及什么可能导致问题,所以我需要你的帮助来解决这个问题出去。
提前致谢!
【问题讨论】:
标签: apache python-3.x module flask wsgi