7

我按照此处的说明创建了一个使用 ubuntu 上的 mod-wsgi 部署到 apache2 的 onefile flask-app。使用原始烧瓶应用程序时一切正常。但是,将import nltk添加到烧瓶应用程序时,apache 挂起(没有 500)。

我使用 python 2.7 和 nltk 2.0.4

其他人似乎对其他软件包也有类似的问题。环境

WSGIApplicationGroup %{GLOBAL}

在 VirtualHost 配置中似乎有所帮助。但是,我仍然得到相同的行为。有人遇到同样的问题吗?谢谢您的帮助!

这是虚拟主机配置文件:

<VirtualHost *:8080>

    # ---- Configure VirtualHost Defaults ----

    ServerAdmin jsmith@whoi.edu 

    DocumentRoot /home/bitnami/public_html/http

    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>

    <Directory /home/bitnami/public_html/http/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all
    </Directory>

    # ---- Configure WSGI Listener(s) ----

    WSGIDaemonProcess flaskapp user=www-data group=www-data processes=1 threads=5
    WSGIScriptAlias /flasktest1 /home/bitnami/public_html/wsgi/flasktest1.wsgi 

    <Directory /home/bitnami/public_html/http/flasktest1>
            WSGIProcessGroup flaskapp
            WSGIApplicationGroup %{GLOBAL}
            Order deny,allow
            Allow from all
    </Directory>

    # ---- Configure Logging ----

ErrorLog /home/bitnami/public_html/logs/error.log
LogLevel warn
CustomLog /home/bitnami/public_html/logs/access.log combined

这是修改后的烧瓶代码

#!/usr/bin/python
from flask import Flask

import nltk
app = Flask(__name__)
@app.route('/')
def home():
    return """<html>
    <h2>Hello from Test Application 1</h2>
    </html>"""

@app.route('/<foo>')
def foo(foo):
    return """<html>
    <h2>Test Application 1</2>
    <h3>/%s</h3>
    </html>""" % foo

if __name__ == '__main__':
    "Are we in the __main__ scope? Start test server."
    app.run(host='0.0.0.0',port=5000,debug=True)
4

1 回答 1

6

你在哪里:

<Directory /home/bitnami/public_html/http/flasktest1>
        WSGIProcessGroup flaskapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
</Directory>

它应该是:

<Directory /home/bitnami/public_html/http>
        WSGIProcessGroup flaskapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
</Directory>

因为由于指令位于错误的上下文中,您既没有在守护进程模式下运行应用程序,也没有在主解释器中运行应用程序。

然后,该目录指令与上面相同目录的指令冲突,因此将它们合并。

如果使用 mod_wsgi 3.0 或更高版本,则可能会删除第二个 Directory 块并使用:

WSGIDaemonProcess flaskapp threads=5
WSGIScriptAlias /flasktest1 /home/bitnami/public_html/wsgi/flasktest1.wsgi process-group=flaskapp application-group=%{GLOBAL}

请注意, processes=1 已被删除,因为这是默认设置,并且设置它意味着您可能不想要的其他内容。您也不需要设置用户/组,因为无论如何它都会自动以 Apache 用户身份运行。

于 2012-12-15T23:27:25.797 回答