Dreamhost上的Flask Passenger WSGI

时间:2013-07-22 02:01:26

标签: python flask passenger dreamhost

首先,我按照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。

你能告诉我我做错了什么吗?

1 个答案:

答案 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