Назад | Перейти на главную страницу

Развертывание django на mod_wsgi

Эта проблема:
Я получаю ошибку 404 при попытке связаться с localhost: 80.

[root@alarmpi public_html]# tail -n 1 /var/log/httpd/error_log 
[Sat Jun 04 23:09:50.235251 2016] [wsgi:error] [pid 2323:tid 1973417008] [client ::1:45230] Target WSGI script not found or unable to stat: /home/alarm/public_html/hamstergangster.eu/hamstergangster/hamstergangster/apache/wsgy.py    

Система:
Использование новой установки Arch Arm на Raspberry Pi 2.

[root@alarmpi alarm]# apachectl -V
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::ba27:ebff:fed4:595a. Set the 'ServerName' directive globally to suppress this message
Server version: Apache/2.4.20 (Unix)
Server built:   Apr 18 2016 12:41:21
Server's Module Magic Number: 20120211:57
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   32-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
[root@alarmpi hamstergangster.eu]#apachectl -k restart       
[root@alarmpi hamstergangster.eu]# tail -n 5 /var/log/httpd/error_log 
[Sat Jun 04 22:19:50.348445 2016] [mpm_event:notice] [pid 327:tid 1995890688] AH00494: SIGHUP received.  Attempting to restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::ba27:ebff:fed4:595a. Set the 'ServerName' directive globally to suppress this message
[Sat Jun 04 22:19:50.403560 2016] [lbmethod_heartbeat:notice] [pid 327:tid 1995890688] AH02282: No slotmem from mod_heartmonitor
[Sat Jun 04 22:19:50.409304 2016] [mpm_event:notice] [pid 327:tid 1995890688] AH00489: Apache/2.4.20 (Unix) mod_wsgi/4.4.22 Python/3.5.1 configured -- resuming normal operations
[Sat Jun 04 22:19:50.409539 2016] [core:notice] [pid 327:tid 1995890688] AH00094: Command line: '/usr/bin/httpd'
[root@alarmpi hamstergangster.eu]# source venv/bin/activate
(venv) [root@alarmpi hamstergangster.eu]# python       
Python 3.5.1 (default, Mar  6 2016, 10:14:04) 
[GCC 5.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 9, 6, 'final', 0)

Конфигурация:
/home и /home/alarm иметь 777 разрешений /home/alarm/public_htmml и все внутри тоже есть 777 разрешений; не проблема с разрешением.

TL; DR стандартный новый проект Django в виртуальной среде. Точные команды:

mkdir -p /home/alarm/public_html/hamstergangster.eu
cd /home/alarm/public_html/hamstergangster.eu
virtualenv venv -p python3.5
source venv/bin/activate
pip install django
django-admin startproject hamstergangster
cd hamstergangster
django-admin startapp helloapp #configuring helloapp to take care of / and return HttpResponse("Hello World")
./manage.py makemigrations
./manage.py migrate

Прекрасно работает на сервере разработки.

/home/alarm/public_html/hamstergangster.eu/hamstergangster/hamstergangster/apache
__init__.py  override.py  wsgi.py

Не думаю, что нужно содержимое wsgi.py, так как он вообще не загружается.

/etc/httpd/conf/httpd.conf
#Lines lines lines...
LoadModule wsgi_module modules/mod_wsgi.so
#Lines lines lines...
<VirtualHost *:80>
        ServerName localhost
        WSGIScriptAlias / /home/alarm/public_html/hamstergangster.eu/hamstergangster/hamstergangster/wsgy.py

        <Directory /home/alarm/public_html/hamstergangster.eu/hamstergangster/hamstergangster/apache/">
        <Files wsgi.py>
        Require all granted
        </Files>
        </Directory>

</VirtualHost>

Все внутри одного большого httpd.conf (по умолчанию)

Учебники, которые я пробовал: http://pastebin.com/NTSC1Kj3 Я получил представление о том, как использовать virtualenvs из официальной документации django

Итак, что мне нужно сделать, чтобы мой любимый «Hello World» появился на моем экране Lynx? Обратите внимание, что я разработчик, а не системный администратор, и я упускаю из виду кое-что довольно очевидное.
Я проверил /home/alarm/public_html/hamstergangster.eu/hamstergangster/hamstergangster/apache/wsgi.py существование и для разрешений на каждой части пути (установив их на 777).

Если ошибка говорит, что файл не может быть найден

Target WSGI script not found or unable to stat: /home/alarm/public_html/hamstergangster.eu/hamstergangster/hamstergangster/apache/wsgy.py

, пытаться catэто

cat /home/alarm/public_html/hamstergangster.eu/hamstergangster/hamstergangster/apache/wsgy.py

Это помогло мне заметить грамматическую ошибку, которую я сделал - это wsgi.pyне wsgy.py. Я не заметил этого, когда cdв каталог: D