在Ubuntu 16.04上使用Apache mod_wsgi部署Bottle.py应用程序

时间:2016-04-27 22:15:43

标签: python apache mod-wsgi bottle

我很难部署Bottle应用。我曾尝试在过去的问题中使用一些建议的答案,但我似乎无法使其工作。我最终得到500内部服务器错误

这是我的设置。

  • Ubuntu 16.04
  • 的Apache
  • 中的libapache2-MOD-WSGI-PY3
  • Python 3.5

我的.wsgi和app.py文件位于:

的/ var / WWW / bottle_app /

  • app.wsgi
  • app.py

app.wsgi如下

import os
# Change working directory so relative paths (and template lookup) work again
os.chdir(os.path.dirname(__file__))

import bottle
# ... build or import your bottle application here ...
import app
application = bottle.default_app()

app.py如下

from bottle import route
@route('/')
def hello():
    return 'Hello world'

Apache .conf文件:

<VirtualHost *:80>
ServerName example.com 

WSGIDaemonProcess bottle_app user=bottle group=www-data processes=1 threads=5
WSGIScriptAlias / /var/www/bottle_app/app.wsgi

<Directory /var/www/bottle_app>
    WSGIProcessGroup bottle_app
    WSGIApplicationGroup %{GLOBAL}
    Require all granted
</Directory>

当我运行python3 app.py时,没有返回任何内容(我假设这是预期的) 当我运行python3 app.wsgi时,我得到:

Traceback (most recent call last):
File "app.wsgi", line 3, in <module>
  os.chdir(os.path.dirname(__file__))
FileNotFoundError: [Errno 2] No such file or directory: ''

我的Apache错误日志显示以下错误。

Target WSGI script '/var/www/bottle_app/app.wsgi' cannot be loaded as Python module
Exception occurred processing WSGI script '/var/www/bottle_app/app.wsgi
Traceback (most recent call last):
File "/var/www/bottle_app/app.wsgi", line 7, in <module>
   import app
ImportError: No module named 'app'

我是在带有sudo权限的用户瓶下安装干净的Ubuntu上完成的。这可能是我第10次使用来自有类似问题的用户的其他问题的不同建议重建。我试图避免发布看起来像重复的问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

在app.wsgi文件中导入app模块之前,请尝试:

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

更简洁的方法可能是将主页 python-path 参数用于Apache配置中的WSGIDaemonProcess条目。

WSGIDaemonProcess bottle_app user=bottle group=www-data processes=1 threads=5 python-path=/var/www/bottle_app

__file__不是绝对的,所以如果你需要为这种目的获取它的位置(像Apache这样的控制过程可能会用路径做有趣的事情)尝试:

os.chdir(os.path.dirname(os.path.abspath(__file__)))
相关问题