麻烦在apache / mod_wsgi上运行烧瓶

时间:2012-06-18 18:31:02

标签: python apache flask mod-wsgi

我正在尝试使用apache2和mod_wsgi运行一个基本的helloworld,但是根据flask文档中的教程,我得到的是一个错误500.

一切都在/ var / www / myapp

myapp.wsgi

from yourapplication import app as application

的/ etc / apache2的/位点可获取/默认

<VirtualHost *:80>
ServerName mydomain

WSGIDaemonProcess myap user=web group=www-data  threads=5
WSGIScriptAlias / /var/www/mydomain/myap.wsgi

<Directory /var/www/myapp>
    WSGIProcessGroup myap
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

hello.py(烧瓶应用)

#!/usr/bin/env python
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def hello():
    return render_template('hello.html')

 if __name__ == '__main__':
     app.run()

2 个答案:

答案 0 :(得分:2)

首先,您应该配置某种logging,这样您就可以看到500响应背后的实际异常。

根据您的代码,当您尝试从app而不是yourapplication导入hello时,可能会在WSGI文件中生成ImportError。尝试:

from hello import app as application

如果您在此处发布的内容与您服务器上的内容相符,那么您还可以使用myap代替myapp。无论哪种方式,记录您的错误都应该确认。

答案 1 :(得分:2)

我注意到3件事:

  1. .wsgi和.py
  2. 使用相同的名称
  3. 在.wsgi模块中导入您自己的程序
  4. 您在apache配置中将myapp.wsgi拼错了myapp.wsgi
  5. 在尝试部署到Apache之前,请确保您的代码使用Flask的Web服务器。 你的最终代码看起来应该是这样的:

    hello.wsgi

    import sys
    sys.path.insert(0, '/path/to/your/application')
    from hello import app as application
    

    的httpd.conf

    <VirtualHost *:80>
    ServerName mydomain
    
    WSGIDaemonProcess myapp user=web group=www-data  threads=5
    WSGIScriptAlias / /var/www/mydomain/myapp.wsgi
    
    <Directory /var/www/mydomain>
        WSGIProcessGroup myapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
    

    最后,如果发生任何错误,您可以在Apache的文件夹中,在Logs / error_log中跟踪它们。 Graham说,在Flask中启用调试模式,您将看到应用程序中的任何错误,并在此处更好地解释。 基本上你只需要在hello.py中更改它:

    if __name__ == '__main__':
        app.run(debug= True)