2016-11-22 4 views
0

/вар/Журнал/HTTPD/error_log говорит,Джанго Apache Redhat Разрешение отказано, звоните в FOPEN() не

[Tue Nov 22 12:54:51.763863 2016] [mime_magic:error] AH01512: mod_mime_magic: can't read /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py', referer: http://ipaddress/Live 
[Tue Nov 22 12:54:51.763953 2016] [mime_magic:error] AH01512: mod_mime_magic: can't read /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py', referer: http://ipaddress/Live 
[Tue Nov 22 12:54:51.771547 2016] [:error] (13)Permission denied: client ######## mod_wsgi (pid=39821, process='', application='omadi-trafcbi01.intranet.hdr|'): Call to fopen() failed for '/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py'., referer: http://ipaddress/Live 

Я переехал мой проект из моей домашней папки в/вар/WWW/в попытке для устранения проблем с разрешениями (безрезультатно).

вот что я добавил к /etc/httpd/conf/httpd.conf,

WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
WSGIPythonPath /bin/python3/site-packages:/var/www/Django_Project/cbtraffic/cbTraffic 
<Directory /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic> 
<Files wsgi.py> 
Require all granted 
</Files> 
</Directory> 

У меня также есть/и т.д./HTTPD/сайты с поддержкой/000-умолчанию файл,

<VirtualHost *:80> 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
    <Directory "/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic"> 
     Require all granted 
    </Directory> 
    WSGIDaemonProcess cbTraffic python-path=/var/www/Django_Project:/bin/python3/site-packages 
    WSGIProcessGroup cbTraffic 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
</VirtualHost> 

Вот мой файл wsgi.py,

import os 
import sys 
import site 
sys.path.append("/var/www/Django_Project/cbtraffic/cbTraffic") 
sys.path.append("/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py") 
from django.core.wsgi import get_wsgi_application 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cbTraffic.settings") 
application = get_wsgi_application() 

Это мой первый раз пытается запустить Django на Redhat. Любая помощь будет оценена по достоинству.

+1

Unrelated, но вам не нужно ''/bin/python3/сайт-packages'' в любом из модулей Python вариантов поиска путей. Вы даже не нуждаетесь в каком-либо материале в '' httpd.conf'', пока вы исправляете '' python-path'' '' WSGIDaemonProcess'', чтобы иметь правильный путь ''/var/www/Django_Project/cbtraffic/cbTraffic''. И вам не нужен какой-либо материал '' sys.path'' в файле '' wsgi.py''. Использование '' '' в блоке '' Directory'' сайта по умолчанию сделает доступ к безопасности более конкретным, но работает без него. –

ответ

0

Моя первоначальная проблема была с Selinux. Я пошел в/и т.д./SELinux/конфигурации и изменил файл, так что

SELINUX = разрешительный

раньше, мой файл говорил

SELINUX = исполнение

Это изменение избавились от разрешения ошибка.

Оттуда у меня были другие ошибки с невозможностью импорта сайта или невозможностью импорта django.core.wsgi.

Я пошел в Django docs https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/ и добавил virtualenv и использовал mod_wsgi в режиме демона.

Общая проблема, которую я имел была с апача с помощью Python 2. Я хотел бы получить крошечные сообщения говорит мне, что загрузка mod_wsgi была пропуск,

"AH01574: module wsgi_module is already loaded, skipping". 

Оказывается, что у меня был mod_wsgi (версия для питона 2), установленного на машине. Я удалил это и после разбега службы HTTPd я получил ошибку,

"httpd: Syntax error on line 379 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_wsgi.so into server: /etc/httpd/modules/mod_wsgi.so: cannot open shared o...file or directory" 

Оказывается, что mod_wsgi не нагружал. Ну, я забыл сделать mod_wsgi для python 3 с новым местом virtualenv.

Я использовал эти инструкции для получения mod_wsgi работать с Python 3 на Redhat

https://code.google.com/p/modwsgi/wiki/DownloadTheSoftware

cd /usr/local/src 
sudo wget https://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz 
sudo tar -zxvf mod_wsgi-3.4.tar.gz 
cd mod_wsgi-3.4/ 
sudo ./configure --with-python=/usr/bin/python3.3 
sudo make 
sudo make install 
mod_wsgi.so is placed in /usr/lib/apache2/modules/ 

Но на этот раз я использовал свой путь к Python3 в моей virtualenv.Я также устанавливал свои пакеты с упаковкой «

pip install -I <name> 

». -I будет устанавливать пакет в вашей виртуальной среде (вместо использования глобальных пакетов сайтов).

Вот основная часть моего файла /etc/httpd/conf/httpd.conf:

WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py process-group=example.com 


WSGIDaemonProcess example.com python-path=/var/www/Django_Project/cbtraffic/cbTraffic:/usr/lib/python3.4/site-packages/cbenv/lib/python3.4/site-packages 
WSGIProcessGroup example.com 


<Directory /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic> 
<Files wsgi.py> 
Require all granted 
</Files> 
</Directory> 

затем в нижней части моего файла /etc/httpd/conf/httpd.conf:

LoadModule wsgi_module /etc/httpd/modules/mod_wsgi.so 
Include /etc/httpd/sites-enabled/000-default 
IncludeOptional conf.d/*.conf 

Загружается файл mod_wsgi.so, который вы создали. Как вы можете видеть, у меня также был файл с включенным сайтом/000 по умолчанию. Вот это содержание ниже:

<VirtualHost *:80> 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
    <Directory "/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic"> 
     Require all granted 
    </Directory> 


WSGIDaemonProcess cbTraffic python-path=/var/www/Django_Project:/usr/lib/python3.4/site-packages/cbenv/lib/python3.4/site-packages 
    WSGIProcessGroup cbTraffic 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 




</VirtualHost> 
+0

Не используйте ничего с сайта Google Code, связанного с mod_wsgi. Это старые документы, которые Google не позволит вам удалить. Последняя версия mod_wsgi находится на данный момент 4.5.7. Намного больше, что 3.4. Не используйте 3.4. Также см. Более актуальные документы о том, как настроить виртуальные среды Python по адресу http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html, вы не должны использовать '' site-packages'' 'в' 'python-path'' для настройки виртуальной среды Python. –

1

Appache обычно запускается как пользователь httpd. Я бы удостоверился, что у этого пользователя есть права на чтение для этого каталога. Вы можете попробовать:

chown -R httpd:httpd /var/www/Django_Project/  
+0

Я не был уверен, что это за группа/пользователь, так как chown -R httpd: httpd/var/www/Django_Project/дал мне ошибку «неверный пользователь». Я использовал find/-name httpd.conf | xargs grep -i "^ user", чтобы найти пользователя и find/-name httpd.conf | xargs grep -i "^ group", чтобы получить группу. Команда chown -R apache: apache/var/www/Django_Project/прошла успешно, но я все еще получаю такую ​​же проблему с разрешениями. –

+0

Каковы разрешения на/var/www? – 2ps

+0

Я изменил/и т.д./SELinux/конфигурации так SELINUX = разрешительный и побежал /SYS/фс/SELinux/envorce через "эхо 0>/SYS/фс/SELinux/исполнение" Это сделало предыдущие ошибки исчезают! Теперь я получаю сообщение об ошибке «Нет модуля с именем django.core.wsgi», где ошибка возникает в моем файле wsgi.py в строке «from django.core.wsgi import get_wsgi_application» –