Примечание: Я думаю, рамки для бутылок здесь не актуальны. Wsgi есть.apache2, mod_wsgi, веб-приложение python (рамка для бутылок)
Мне удалось настроить apache для работы с wsgi и однофайльным веб-приложением на основе флэш-оболочки python. Ниже файлы - это то, что у меня есть прямо сейчас - apache использует virtualenv и запускает единственный файл wsgi/py, содержащий все.
виртуального хоста:
<VirtualHost *:80>
ServerName bottle-test
WSGIDaemonProcess bottle-test user=www-data group=www-data processes=1 threads=5
WSGIScriptAlias//home/tducin/Development/Python/bottle-test/src/app.wsgi
<Directory /home/tducin/Development/Python/bottle-test/src>
WSGIProcessGroup bottle-test
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
ErrorLog /var/log/apache2/wsgi/error-bottle.log
CustomLog /var/log/apache2/wsgi/access-bottle.log combined
</VirtualHost>
httpd.conf (это где мой virtualenv проживает):
WSGIPythonHome /home/tducin/Development/Python/bottle-test
И, наконец, это app.wsgi:
import os
# Change working directory so relative paths (and template lookup) work again
os.chdir(os.path.dirname(__file__))
import bottle
app = bottle.Bottle()
@app.route('/')
def siema():
return bottle.template('<h1>SIEMA {{arg}}!</h1>', arg='Janie')
@app.route('/hello/<name>')
def hello(name):
return bottle.template('<b>Hello {{name}}</b>!', name=name)
application = app
Что Я хочу сделать это, чтобы отделить слой wsgi от остальной части приложения. Я несколько раз пытался импортировать приложение из другого файла, но каждый раз получал ошибку Failed to import module
. Кто-нибудь знает, как отделить wsgi от приложения?
редактировать: Я переехал httpd.conf в wsgi.conf (она загружена), и теперь у меня есть следующие:
WSGIPythonHome /home/tducin/Development/Python/bottle-test
WSGIPythonPath /home/tducin/Development/Python/bottle-test/src
Проблема в том, что теперь я получил ошибку 500 , журналы ошибок apache:
[Wed Feb 05 09:24:32 2014] [error] [client 127.0.0.1] mod_wsgi (pid=4260): Target WSGI script '/home/tducin/Development/Python/bottle-test/src/app.wsgi' cannot be loaded as Python module.
[Wed Feb 05 09:24:32 2014] [error] [client 127.0.0.1] mod_wsgi (pid=4260): Exception occurred processing WSGI script '/home/tducin/Development/Python/bottle-test/src/app.wsgi'.
[Wed Feb 05 09:24:32 2014] [error] [client 127.0.0.1] Traceback (most recent call last):
[Wed Feb 05 09:24:32 2014] [error] [client 127.0.0.1] File "/home/tducin/Development/Python/bottle-test/src/app.wsgi", line 7, in <module>
[Wed Feb 05 09:24:32 2014] [error] [client 127.0.0.1] import server
[Wed Feb 05 09:24:32 2014] [error] [client 127.0.0.1] ImportError: No module named server
src/server.py содержит информацию о приложении для бутылок. Файл app.wsgi получил полные исполняемые разрешения:
-rwxrwxr-x 1 tducin tducin 377 Feb 5 09:22 app.wsgi
Я последовал за вашим ответом, но все же что-то не так. Я обновил свой вопрос. PS часть 'os.chdir' поступает из официальных документов для бутылок: http://bottlepy.org/docs/dev/tutorial_app.html#server-setup. – ducin
Являются ли каталоги/файлы доступными для пользователя, которые Apache работает как? –