关于python:在WebFaction的子文件夹中部署flask应用程序

Deploying flask app in a subfolder on WebFaction

我一直遵循以下说明:http://flask.pocoo.org/snippets/65/

但有些东西写得不太清楚。

所以我的结构是这样的:

1
2
3
4
5
6
7
/<username>/webapps/flask/
----__init__.py
/<username>/webapps/flask/htdocs/
----index.py
----config.py
----/app/     (this is my flask application where i have views.py).
----/tmp/

我的初始版本:

1
2
3
4
5
6
7
8
class WebFactionMiddleware(object):
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        environ['SCRIPT_NAME'] = '/app'
        return self.app(environ, start_response)

app.wsgi_app = WebFactionMiddleware(app.wsgi_app)

我的index.py:

从Flask导入应用程序作为应用程序

我的httpd.conf:

1
2
3
4
5
6
7
8
9
10
11
WSGIPythonPath /home/<username>/webapps/flask/htdocs/
#If you do not specify the following directive the app *will* work but you will
#see index.py in the path of all URLs
WSGIScriptAlias /app /home/<username>/webapps/flask/htdocs/index.py

<Directory /home/<username>/webapps/flask/htdocs>
    AddHandler wsgi-script .py
    RewriteEngine on
    RewriteBase /app
    WSGIScriptReloading On
</Directory>

我从控制面板安装为"wsgi 3.4/python2.7",但我必须使用easy-install2.6安装在ssh sqlacalchemy、flask login等中,因为easy-install2.7不存在。

服务器错误日志显示:

1
2
 from flask import app as application
[Sun Nov 04 23:29:12 2012] [error] [client 127.0.0.1] ImportError: No module named flask

(我确实重启了Apache2)


错误信息清楚地表明你没有安装烧瓶。如果您在Web派系控制面板中为python 2.7创建了应用程序,那么您还需要为python2.7安装所有libs和flask本身。你说你安装的所有东西都是Easy Instal2.6,这意味着你安装的所有东西都是针对Python2.6的。

我会说,首先安装python 2.7的所有libs和deps(flask也是),然后再试一次。另外,我建议开始使用virtualenv,因为它将有助于以后不要弄乱软件包版本(关于如何在web派系上使用virtualenv部署的一些简短信息http://manavgoel.net/blog/post/2012/7/deploying flask website on web派系)。


查看https://community.webparion.com/questions/12718/installing-flask

确保相应地遵循链接中的步骤。对于步骤2,有很多方法可以通过。但我希望你这样做。

a.先将其复制到文本编辑器中,然后更改appname="urlaskname"PLS Unix区分大小写。

b.之后,将文件保存为anyname.sh(Unix脚本)

c.传输到服务器并运行

1
chmod a+x anyname.sh

d.然后在服务器中运行这个来安装flask并为web做好准备。

1
./anyname.sh

一切都完成了。

您也可以直接执行这些步骤,但要确保所有的正义,请尝试只复制和编辑AppName。