2015-12-11 4 views
0

Я запускаю приложение django для продажи под виртуальным сервером с apache как непривилегированный пользователь.Saleor Django Apache mod_wsgi не будет обслуживать/static/admin/

Фактически, все, что происходит, было довольно простым, но один из нас сбивает меня с толку.

Сайт/static/admin/часть сайта не обслуживается.

Я просмотрел deployment docs и other advice, но ничего не нашел, что помогает.

My/static/directory обслуживается просто отлично. Я уверен, что это что-то очень очевидное для неджанго-нооба, но это то, что я есть. Я не уверен, что это коаксиальный для псевдонимов подкаталога в другом каталоге с псевдонимом. Я бы предпочел не прибегать к символическим ссылкам.

# dev-site.conf 

WSGIPythonPath/home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages 

<VirtualHost *:80> 
     ServerName example.com 
     ServerAdmin [email protected] 
     DocumentRoot "/home/admin/project" 

     WSGIDaemonProcess example.com python-path=/home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages 
     WSGIProcessGroup example.com 
     WSGIScriptAlias//home/admin/project/saleor/wsgi.py 

     Alias /media/ /home/admin/project/media/ 
     <Directory /home/admin/project/media/> 
       Require all granted 
     </Directory> 

     Alias /favicon.ico /home/admin/project/saleor/static/images/favicon.ico 
     Alias /robots.txt /home/admin/project/saleor/static/robots.txt 
     Alias /static/ /home/admin/project/saleor/static/ 
     <Directory /home/admin/project/saleor/static/> 
       Require all granted 
     </Directory> 

     Alias /static/admin/ /home/admin/project/venv/lib/python2.7/site-packages/django/contrib/admin/static/admin/ 
     <Directory /home/admin/project/venv/lib/python2.7/site-packages/django/contrib/admin/static/admin/> 
       Require all granted 
     </Directory> 

     <Directory /home/admin/project> 
       <Files wsgi.py> 
         Require all granted 
       </Files> 
     </Directory> 

     ErrorLog ${APACHE_LOG_DIR}/error.log 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet 

Включая мой продавец/wsgi.py для смартфонов.

# wsgi.py 

python 

import os 
import sys 
import site 

site.addsitedir("/home/admin/project/venv/lib/python2.7/site-packages") 
os.environ.setdefault("SECRET_KEY", "br549") 
os.environ.setdefault("MYSQL_DB_URL", "mysql://dbuser:[email protected]:3306/saleor") 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "saleor.settings") 

project = "/home/admin/project/saleor" 
workspace = os.path.dirname(project) 
sys.path.append(workspace) 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 
+0

Мои кодовые заборы, похоже, шутят форматирование разметки. Об этом также будет сказано. :-D – lysdexia

+0

Спасибо. Я это запомню. – lysdexia

ответ

0

Не следует пытаться заставить Apache обслуживать непосредственно из статического каталога либо ваших собственных приложений, либо приложения администратора. Вместо этого следуйте документации и используйте команду collectstatic для сбора статических файлов для всех приложений в одном месте и оттуда.

+0

Я прочитал эту часть [docs] (https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/#serving-the-admin-files). К сожалению, я не мог заставить его работать. Я что-то упускаю. – lysdexia

+0

[Это] (https://docs.djangoproject.com/en/1.9/ref/contrib/staticfiles/#django-admin-collectstatic) - это бит документов, за которыми вы должны следовать. Если он не работает, отправьте сообщение об ошибке и соответствующие части параметров settings.py. –

+0

Я думаю, что, наконец, у меня есть голова вокруг того, что * предположительно * произойдет. Я не понимал, что нужно было делать «django-admin collectstatic» (который отказывается видеть мой DJANGO_SETTINGS_MODULE = saleor.static, поэтому я предполагаю, что есть еще одна дополнительная гимнастка, которую мне нужно будет пройти, чтобы сделать это работать в виртуальном env), чтобы скопировать все, что угодно магическое для использования django. Мне придется оставить этот покой, прежде чем я поражу своих коллег моим поведением профанацией. – lysdexia

0

Я не понял документацию по адресу serving the admin files или django-admin collectstatic.

Документация для обслуживания файлов администрирования указала, что если в параметре INSTALLED_APPS параметра settings.py включен параметр "django.contrib.staticfiles", рекомендуется, чтобы список STATICFILES_DIRS был указан в settings.py должен содержать пути к «статический» каталог (django/contrib/admin/static/admin), предоставленный django для своего сервера разработки.

Сообщается, что используется команда управления коллекцией, которая физически копирует файлы в «статический» каталог в том, что вы будете настраивать как ServerRoot в файле sitename.conf для apache для обслуживания.

Моя проблема была в значительной степени ошибкой noob. Я следовал инструкциям, не зная, что есть какая-то полученная мудрость о том, что на самом деле используется для запуска команды «collectstatic».

Вместо

django-admin collecstatic 

нужно (в моем случае, YMMV)

python manage.py collectstatic 

При вызове collectstatic с Джанго-администратором, я получил яростную ошибку:

ImportError: No module named saleor.settings 

, который был очень запутанным для меня, поскольку я установил эту переменную enivronment как в файле .env, так и в моем файле wsgi.py. Я подумал, что это может быть какая-то причуда с virtualenv. Установка этого переменный в командной строке в результате:

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

Что привело меня очень отвратительную кроличью нору Висла. моя настройка virtualenv и каждый файл конфигурации, который я когда-либо редактировал. К счастью, они были прекрасны.Фактический вызов был с

$ python manage.py collectstatic 

You have requested to collect static files at the destination 
location as specified in your settings: 

    /home/admin/project/static 

This will overwrite existing files! 
Are you sure you want to do this? 

Type 'yes' to continue, or 'no' to cancel: 

Который затем переходит к магически копировать то, что мне нужно (я надеюсь!) В моем проекте/статический каталог.

Моя ошибка noob не читала django-admin and manage.py, тем самым обнаружив, что сценарий удобства имеет удобный сценарий. RIMSHOT

Еще одна путаница (для меня, во всяком случае) - это утверждение о том, что нельзя обслуживать статические файлы из «приложения» или «приложения администратора». Более простой способ подумать об этом: «нужно запустить скрипт, который появляется либо для переноса, либо для репликации rsync, тем самым копируя статические файлы из myapp/static и ~/project/venv/lib/python2.7/contrib/admin, поэтому что apache не сможет играть с глупыми педерастами с важными файлами ». Это НЕ означает, что в файл sitename.conf не указывается путь к/static /. Здесь нет никакой магии, просто копируя статические файлы.

Поэтому:

WSGIPythonPath /home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages 

<VirtualHost *:80> 
     ServerName example.com 
     ServerAdmin [email protected] 
     DocumentRoot "/home/admin/project" 

     Alias /media/ /home/admin/project/media/ 
     <Directory /home/admin/project/media/> 
       Require all granted 
     </Directory> 

     Alias /static/ /home/admin/project/static/ 
     <Directory /home/admin/project/static/> 
       Require all granted 
     </Directory> 

     WSGIDaemonProcess example.com python-path=/home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages 
     WSGIProcessGroup example.com 
     WSGIScriptAlias//home/admin/project/saleor/wsgi.py 

     <Directory /home/admin/project> 
       <Files wsgi.py> 
         Require all granted 
       </Files> 
     </Directory> 

     ErrorLog ${APACHE_LOG_DIR}/error.log 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet 

теперь у меня есть статические файлы обслуживаются из ~/проекта/статический/каталог!

/me вытирает пот.

Спасибо Daniel!

Смежные вопросы