在 Ubuntu 16.04 上使用 Apache mod_wsgi 部署 Bottle.py 应用程序
Deploying a Bottle.py app with Apache mod_wsgi on Ubuntu 16.04
我很难部署 Bottle 应用程序。我曾尝试使用过去问题中的一些建议答案,但似乎无法正常工作。我最终遇到了 500 Internal Server Error
这是我的设置。
- Ubuntu16.04
- 阿帕奇
- 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 权限的用户 bottle 下进行了干净的 Ubuntu 安装。这可能是我第 10 次使用来自有类似问题的用户的其他问题的不同建议进行重建。我试图避免 post 一个看起来重复的问题。任何帮助将不胜感激。
在 app.wsgi 文件中导入应用程序模块之前,尝试:
import sys
sys.path.insert(0, '/var/www/bottle_app')
更简洁的方法可能是使用 home 或 python-path 参数到 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__)))
我很难部署 Bottle 应用程序。我曾尝试使用过去问题中的一些建议答案,但似乎无法正常工作。我最终遇到了 500 Internal Server Error
这是我的设置。
- Ubuntu16.04
- 阿帕奇
- 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 权限的用户 bottle 下进行了干净的 Ubuntu 安装。这可能是我第 10 次使用来自有类似问题的用户的其他问题的不同建议进行重建。我试图避免 post 一个看起来重复的问题。任何帮助将不胜感激。
在 app.wsgi 文件中导入应用程序模块之前,尝试:
import sys
sys.path.insert(0, '/var/www/bottle_app')
更简洁的方法可能是使用 home 或 python-path 参数到 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__)))