2013-06-01 3 views
0

Я работал над развертыванием веб-сайта для героку. Сайт, похоже, распознает мои статические файлы, если я запускаю с встроенным сервером django, а именно «runningerver». Однако, если я запускаю с gunicorn Статические файлы не могут быть распознаны. Мне было интересно, есть ли какие-то специальные настройки, которые мне нужно настроить, чтобы волшебным образом добиться признания. Может ли кто-нибудь просветить меня, как эти две команды отличаются друг от друга или это имеет какое-либо отношение к персоналу wsgi?служить статический файл с herokku, django и wsgi

Thanks !!!

Это, как я с runserver в PROCFILE, который довольно аккуратно.

Веб: питон manage.py runserver

enter image description here И вот что я делаю с gunicorn в PROCFILE, что беспорядок

Веб: gunicorn некоторые. dotted.path.to.mywsgi: приложение

enter image description here

UPDATE

К счастью, я работал вокруг этой проблемы, в том числе следующую строку в моей urls.py. Хотя я знаю, что это не идеальное решение, потому что, на самом деле, вам нужно отключить DEBUG. но на данный момент в разработке. он работает хорошо. Может ли кто-нибудь объяснить, что эта линия волшебным образом?

if settings.DEBUG: 
     urlpatterns += patterns('django.contrib.staticfiles.views', 
             url(r'^static/(?P<path>.*)$', 'serve'), 
          ) 
+0

Сервер разработки django ('runningerver') НЕ предназначен для использования в производстве (https://docs.djangoproject.com/en/dev/ref/django-admin/#runserver-port-or-address-port). –

+0

yeap Я знаю.Вот почему я раздражен. Я должен использовать gunicorn xxx.wsgi, но это не сработало правильно – Daniel

ответ

1

Обслуживание статических файлов на Heroku с Django немного сложно. Предполагая, что вы используете приложение «staticfiles», вам нужно запустить «collectstatic» для сбора ваших статических файлов после развертывания. Проблема с Heroku заключается в том, что запуск «collectstatic» в оболочке будет выполняться в новом динамике, который исчезнет, ​​как только он будет завершен.

Одним из возможных решений изложен here:

В принципе, идея состоит в том, чтобы объединить несколько команд в вашем PROCFILE так, что «collectstatic» выполняется в процессе дино раскрутке:

web: python my_django_app/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT my_django_app/settings.py 

Вы также необходимо добавить «статические» виды к вашему urls.py (см. https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user, но дублируйте для STATIC_URL и STATIC_ROOT). Стоит отметить, что документы Django рекомендуют не использовать это в производстве.

Это решение не является идеальным, хотя, поскольку вы все еще используете свой процесс стрельбы для обслуживания статических файлов. ИМХО лучший подход к работе со статическими файлами на Heroku - разместить их на чем-то вроде S3.

+1

Собственно, согласно Heroku, они теперь автоматически пытаются запустить collectstatic при разворачивании dyno (https://devcenter.heroku.com/articles/django-assets). Вам все равно нужно настроить свои URL-адреса. Сервер разработки автоматически добавляет статические URL-адреса. –

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