首先,我按照Matt Carrier博客教程中的说明进行操作(虽然我认为我会在我的域名上创建一个子目录,但事实并非如此)。然后我删除了所有内容并重新开始关于Flask的Dreamhost wiki页面上的说明。每次,我在浏览器中收到一条消息:“导入您的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时创建的目录的名称。该应用程序是penguicontrax.py没有破折号。
我确保passenger_wsgi.py第四行的缩进是一个标签,而不是空格。
我使用DreamHost网页面板(我完全托管的地方)来制作/ home / username / flask_env / public并且我标记了“Passenger(仅限Ruby / Python应用程序)”复选框并单击“更改设置”按钮。
我将passenger_wsgi.py直接FTP到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
当我只使用“来自penguicon-trax导入应用程序作为应用程序”时,它也会这样做。
当我更改该行以删除破折号:“penguicontrax.penguicontrax”并运行它时,它给出了“ImportError:没有名为penguicontrax的模块”。
如果我将该行更改为“从penguicontrax导入应用程序作为应用程序”并通过SSH运行它,它不会给我任何错误消息或其他输出。但是,我的域名现在提供了404。
你能告诉我我做错了什么吗?答案 0 :(得分:2)
如果您的passenger_wsgi.py在其末尾包含以下代码:
from foo.bar import app as application
...然后你需要一个名为“foo”的子目录,其中包含两个文件:一个名为bar.py
的文件和另一个名为__init__.py
的文件,以便Python识别该目录包含模块代码
在您的示例中,从modules should have short, all-lowercase names开始,从文件夹名称(penguicon-trax)中删除短划线。然后,您的Flask application code将位于 $ HOME / flask_env / penguicontrax / penguicontrax.py 中的文件中。最后,请运行以下内容进行试用:
touch $HOME/flask_env/penguicontrax/__init__.py
python $HOME/flask_env/passenger_wsgi.py