【问题标题】:serve static file with herokku, django and wsgi使用 herokku、django 和 wsgi 提供静态文件
【发布时间】:2013-06-01 01:28:47
【问题描述】:

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

谢谢!!!

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

web: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'),
                             )

【问题讨论】:

标签: django heroku wsgi


【解决方案1】:

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

概述了一种潜在的解决方案here

基本上,这个想法是在您的 Procfile 中组合一些命令,以便在 dyno spinup 过程中运行“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 之类的东西上。

【讨论】:

  • 实际上,根据 Heroku 的说法,他们现在在启动测功机时会自动尝试运行 collectstatic (devcenter.heroku.com/articles/django-assets)。您仍然需要设置您的网址。开发服务器自动添加静态url。
猜你喜欢
  • 2011-10-09
  • 2020-01-29
  • 2010-10-18
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 2023-03-05
相关资源
最近更新 更多