使用Virtualenv配置Flask和WSGI

时间:2018-11-09 19:56:42

标签: python flask

我使用Python 3.6,Apache和mod_wsgi成功配置了Ubuntu 16.04 LTS计算机。此文件夹具有安装了Flask的virtualenv。

$ ls -l /var/www/html/odb/
  bin/
  lib/
  include/
  config.wsgi

.wsgi文件非常简单,Apache conf也是如此:

$ cat /var/www/html/odb/config.wsgi

  activate_this = '/home/ubuntu/odb/bin/activate_this.py'
  with open(activate_this) as file_:
  exec(file_.read(), dict(__file__=activate_this))

  import sys
  sys.path.insert(0, '/var/www/html/odb/')

  def application(environ,start_response):
      start_response('200 OK',[('Content-type','text/html')])
      return ['Hello world']

$ cat /etc/apache2/sites-available/odb.conf
  <VirtualHost *>
      ServerName example.com

      WSGIDaemonProcess webserver threads=5
      WSGIScriptAlias / /var/www/html/odb/config.wsgi

      <Directory /var/www/html/odb>
          WSGIProcessGroup webserver
          WSGIApplicationGroup %{GLOBAL}
          Order deny,allow
          Allow from all
      </Directory>
  </VirtualHost>

我可以访问虚拟网页。但是,当我修改.wsgi文件并添加Python Flask应用程序时,我得到一个HTTP500。以下是这些文件:

$ cat /var/www/html/odb/config.wsgi
  activate_this = '/home/ubuntu/odb/bin/activate_this.py'
  with open(activate_this) as file_:
      exec(file_.read(), dict(__file__=activate_this))

  import sys
  sys.path.insert(0, '/var/www/html/odb/')

  from webserver import app as application

$ cat /var/www/html/odb/webserver.py
  from flask import Flask
  app = Flask(__name__)

  @app.route('/')
  def hello_world():
      return 'Hello, World!'

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

当我通过$ flask run --host=0.0.0.0运行该应用程序时,可以通过互联网访问它,因此看来我在指向.wsgi文件中的Flask应用程序时做错了什么。我在做什么错了?

记录:$ cat /var/log/apache2/*log在HTTP 500之后没有任何作用。我注意到/var/www/html/odb/webserver.pyc在HTTP 500之后会显示帮助吗??

1 个答案:

答案 0 :(得分:0)

相信您还可以通过在app.run()命令中启用“ use_reloader”来获取这些日志,

来自http://flask.pocoo.org/docs/0.12/api/

  

'如果您未设置“记住”   Flask将使用通用错误页面抑制任何服务器错误,除非它处于> debug模式。这样,仅启用交互式调试器而无需重新加载代码,则必须使用debug = True和use_reloader = False调用run()。 >在没有处于调试模式的情况下将use_debugger设置为True不会捕获任何异常,因为不会捕获任何异常。'

(抱歉,无法发表评论,积分不足)