首先,我按照 Matt Carrier 博客上的教程中的说明进行操作(尽管假设我会在我的域上创建一个子目录,但实际上我没有)。然后我删除了所有内容并按照 Dreamhost wiki 页面上有关 Flask 的说明重新开始。每次,我都会在浏览器中收到一条消息:“导入您的passenger_wsgi.py时发生错误”。 answer for this topic on StackOverflow不适合我。
我的passenger_wsgi.py文件是:
import sys, os
INTERP = os.path.join(os.environ['HOME'], 'flask_env', 'bin', 'python')
if sys.executable != INTERP:
os.execl(INTERP, INTERP, *sys.argv)
sys.path.append(os.getcwd())
from flask import Flask
application = Flask(__name__)
sys.path.append('penguicon-trax')
from penguicon-trax.penguicontrax import app as application
penguicon-trax 是当我将应用程序克隆到安装 Flask 的 virtualenv 时 Git 创建的目录名称(不在公共(public)目录中)。该应用程序是不带破折号的 penguicontrax.py。
我确保passenger_wsgi.py第四行的缩进是制表符,而不是空格。
我使用 DreamHost webpanel(完全托管的地方)创建/home/username/flask_env/public,并标记了“Passenger(仅限 Ruby/Python 应用程序)”复选框,然后单击“更改设置”按钮。
我直接通过 FTP 将 Passenger_wsgi.py 传输到 Dreamhost 上的 Flask_env 目录中。当我通过 SSH 连接到 Dreamhost 时,命令行上的 ls 会给出:
bin lib passenger_wsgi.pyc public
include passenger_wsgi.py penguicon-trax
当我通过 SSH 运行 Passenger_wsgi.py 时,它会给出:
File "passenger_wsgi.py", line 11
from penguicon-trax.penguicontrax import app as application
^
SyntaxError: invalid syntax
当我只使用“from penguicon-trax import app as application”时,它也会这样做。
当我更改该行以删除破折号:“penguicontrax.penguicontrax”并运行它时,它会给出“ImportError:没有名为 penguicontrax 的模块”。
如果我将该行更改为“from penguicontrax import app as application”并通过 SSH 运行它,它不会给我任何错误消息或其他输出。然而,我的域名现在给出了 404。
你能告诉我我做错了什么吗?
最佳答案
如果您的passenger_wsgi.py末尾有以下代码:
from foo.bar import app as application
...那么您需要一个名为“foo”的子目录,其中包含两个文件:一个名为 bar.py
的文件和另一个名为 __init__.py
的文件以便 Python 识别该目录包含模块代码。
在您的示例中,从文件夹名称 (penguicon-trax) 中删除破折号,因为 modules should have short, all-lowercase names 。然后,你的Flask application code将位于 $HOME/flask_env/penguicontrax/penguicontrax.py 中的文件中最后,运行以下命令进行尝试:
touch $HOME/flask_env/penguicontrax/__init__.py
python $HOME/flask_env/passenger_wsgi.py
关于python - Dreamhost 上的 Flask Passenger WSGI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778894/