在Ubuntu 16.04上使用Apache mod_wsgi部署Bottle.py应用程序
问题描述:
我很难部署Bottle应用程序。我试着在过去的问题中使用一些建议的答案,但我似乎无法得到这个工作。我结束了500内部服务器错误在Ubuntu 16.04上使用Apache mod_wsgi部署Bottle.py应用程序
这是我的设置。
- 的Ubuntu 16.04
- 阿帕奇
- 中的libapache2-MOD-WSGI-PY 3
- 的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'
阿帕奇.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'
我在干净的Ubuntu安装下使用sudo权限在用户瓶下执行了此操作。这可能是我第10次使用来自具有类似问题的用户的其他问题的不同建议进行重建。我试图避免发布一个看似重复的问题。任何帮助将不胜感激。
答
在导入您的应用程序模块中的app.wsgi文件,请尝试:
import sys
sys.path.insert(0, '/var/www/bottle_app')
一个更清洁的方式可能是利用家或蟒蛇路径参数的WSGIDaemonProcess进入在Apache配置中。
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__)))
谢谢回复。我做了你建议给我的app.wsgi的更改,现在当我运行python3 app.wsgi时,没有任何返回,我假设现在所有的都是好的。尽管我的Apache日志仍然显示相同的错误。 – 404error
另一个帖子建议在路径中明确包含你的app目录:'sys.path.insert(0,'/ var/www/bottle_app')'[link](http://stackoverflow.com/questions/17678037/running- Apache的瓶蟒蛇)。尽管如此,我猜想整体配置还有其他问题。不应该需要这么复杂。 – systemjack
'import sys sys.path.insert(0,'/ path/to/application/app/folder')'类似这样的东西? – 404error