Развертывание приложения Bottle.py с Apache mod_wsgi в Ubuntu 16.04
Мне трудно развернуть приложение Бутылка. Я пытался использовать некоторые из предложенных ответов в прошлых вопросах, но я не могу заставить это работать. Я получаю 500 Внутренняя ошибка сервера
Это моя установка.
- Ubuntu 16.04
- апаш
- libapache2-мод-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'
Я сделал это на чистой установке Ubuntu под бутылкой пользователя с привилегиями sudo. Вероятно, это уже десятый раз, когда я перестраивался, используя различные предложения от других вопросов от пользователей, у которых были подобные проблемы. Я пытался избежать публикации вопроса, который выглядел бы как дубликат. Любая помощь будет принята с благодарностью.
1 ответ
Прежде чем импортировать модуль приложения в файл 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__)))