0

我正在努力将网站部署到heroku。如果我使用 django 的内置服务器“ runserver ”运行,该站点似乎可以识别我的静态文件。但是,如果我使用 gunicorn运行,则无法识别静态文件。我想知道是否需要调整任何特殊设置才能神奇地实现识别。谁能告诉我这两个命令具体有何不同,或者它与 wsgi 工作人员有什么关系?

谢谢!!!

这就是我在Procfile中使用runserver的方式,非常简洁。

网页:python manage.py runserver

在此处输入图像描述 这就是我在Procfile 中对gunicorn 所做的事情,这是一团糟

网站:gunicorn some.dotted.path.to.mywsgi:application

在此处输入图像描述

更新

幸运的是,我通过在我的 urls.py 中包含以下行来解决这个问题。虽然我知道这不是一个完美的解决方案,因为实际上,您需要关闭 DEBUG。但至于现在正在开发中。它运作良好。谁能解释这条线的神奇作用?

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

1 回答 1

1

使用 Django 在 Heroku 上提供静态文件有点棘手。假设您使用的是“staticfiles”应用程序,您必须在部署后运行“collectstatic”来收集静态文件。Heroku 的问题在于,在 shell 中运行“collectstatic”实际上会在一个新的测功机中运行,一旦完成,它就会消失。

此处概述了一种潜在的解决方案:

基本上,这个想法是在您的 Procfile 中组合一些命令,以便在 dyno 启动过程中运行“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_URLSTATIC_ROOT)。值得注意的是,Django 文档建议不要在生产中使用它。

但是,此解决方案并不理想,因为您仍在使用 gunicorn 进程来提供静态文件。恕我直言,在 Heroku 上处理静态文件的最佳方法是将它们托管在 S3 之类的东西上。

于 2013-06-01T02:15:33.533 回答