Если вам нравится давать однострочные ответы на длинные вопросы, касающиеся Apache , вот кандидат.
Кратко
Как мненастроить httpd.conf
для запуска mod_wsgi
?Что такое подходящая "сантехника"?
Длинный шпиль
Я начинаю с c:/Apache24/conf/httpd.conf
, где соответствующие биты:
ServerRoot "c:/Apache24"
Listen 80
LoadModule access_compat_module modules/mod_access_compat.so
...
LoadModule mime_module modules/mod_mime.so
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "c:/Apache24/htdocs"
<Directory "c:/Apache24/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog "logs/error.log"
LogLevel warn
<IfModule log_config_module>
...
CustomLog "logs/access.log" common
</IfModule>
правильная подача
c:/Apache24/htdocs/
└── static/
└── index.html
Я изменяю последние так, чтобы они стали
c:/Apache24/htdocs/
├── static/
│ └── index.html
└── dynamic/
├── hello.py
└── hello.wsgi
и добавляются в хвост httpd.conf
строк
LoadFile "d:/anaconda3/python36.dll"
LoadModule wsgi_module "d:/anaconda3/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "d:/anaconda3"
<VirtualHost *>
# ServerName example.com
WSGIScriptAlias \ c:\Apache24\htdocs\dynamic\hello.wsgi
<Directory c:\Apache24\htdocs\dynamic>
Require all granted
</Directory>
</VirtualHost>
WSGIScriptReloading On
Я прокомментировал директиву ServerName
, так как считаю, что она здесь неактуальна.
hello.py
содержит вашу типичную стартовую программу с одним маршрутом, без главной охраны, хотя IIUC не имеет значения, потому что этовсе равно пропустите mod_wsgi .Код Python использует Flask
.Проблема может быть общей для любого веб-приложения WSGI.hello.wsgi
имеет
from hello import app as application
Из путаницы между /
и \
видно, что я запускаю все это в Windows.Я считаю, что это также не имеет значения, а также тот факт, что это Windows Server 2008 (не спрашивайте).Я также использую последнюю версию Anaconda3 (3.5.2 в настоящее время).Теперь я наконец могу задать вопрос.
Вопрос
Когда я запрашиваю http://mysite.foo/dynamic
, я могу загрузить файлы .py
и .wsgi
, нос директивой VirtualHost
все в порядке, судя по тому, что у хвоста бревен нет жалоб, logs/access.log
и logs/errors.log
.
Что такое кусок сантехники, который я 'м отсутствует?Как активировать маршрут в hello.py
?
Примечание для будущих действий
Даже если использование Apache указывает на то, что кто-то движется к развертыванию, все равно полезно включить отладкутак, чтобы Flask отображал сообщения об ошибках в журнале ошибок Apache .