使用 heroku 在生产中部署媒体和静态的 django 设置和 url 应该是啥样的?

Posted

技术标签:

【中文标题】使用 heroku 在生产中部署媒体和静态的 django 设置和 url 应该是啥样的?【英文标题】:What should django settings and urls look like for media and static deploying in production with heroku?使用 heroku 在生产中部署媒体和静态的 django 设置和 url 应该是什么样的? 【发布时间】:2012-12-19 05:34:34 【问题描述】:

目前,我在让我的静态和媒体与 heroku 上的 django 一起工作时遇到了问题。我的静态终于可以工作了,但我的媒体不行,这是我在任何类型的生产环境中的第一次,所以我不确定它是否正确完成。我的媒体文件将在上传后工作,但是一旦我编辑了一些不相关的内容并尝试将其推送到 heroku 输入,它们就不再工作了:

git add .
git commit -m "changes"
git push heroku master

所以在我更新我的 heroku 应用程序后,用户必须重新添加他们的媒体文件才能让他们在我每次更新时都能正常工作。就我目前的代码而言:

#settings.py
DEBUG = False
MEDIA_ROOT = 'media'
MEDIA_URL = '/media/'
STATIC_ROOT = 'static'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    'static',
)

#urls.py
urlpatterns += staticfiles_urlpatterns()

if not settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', 'document_root': settings.STATIC_ROOT),
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', 'document_root': settings.MEDIA_ROOT),
    )

我不知道该怎么做,我尝试了几种不同的更改我的网址和设置,但没有任何运气。我读过其他帖子并尝试过,我读过文档,不幸的是我仍然不太明白。在开发中一切正常,但在我的设置下,我的开发项目有不同的代码。任何帮助将不胜感激。

编辑

因此,经过更多挖掘,我决定尝试使用 Amazon S3 来处理我的媒体文件。我仍然不确定如何将文件上传到 S3,但我已经创建了一个 S3 存储桶并设置了我的 heroku 设置(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、S3_BUCKET_NAME)。我仍然不确定我的媒体和静态设置应该是什么样子。如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

【参考方案1】:

好吧,在我多次用头撞墙之后,我终于让事情按照应有的方式工作了。我现在将 Amazon S3 用于我的静态和媒体文件(部分感谢 this 帖子,对我正确设置最有帮助的帖子是 here。如果您使用的是 heroku,您可能想看看将 S3 用于静态和媒体文件。是的,这是你必须尝试配置和集成的其他东西,不,它不是免费的,但如果你只是推回去,你可能会发现自己最终还是会使用它,所以保存自己花点时间。This 也有助于将静态和媒体分离到单独的目录中。

【讨论】:

以上是关于使用 heroku 在生产中部署媒体和静态的 django 设置和 url 应该是啥样的?的主要内容,如果未能解决你的问题,请参考以下文章

gzip 在带有 Whitenoise 的 Django 中不起作用

Heroku/Django 部署:为啥我在成功部署和静态收集时收到错误 500?

在heroku上部署路由器的Django多个数据库

在 Heroku 上找不到 Django 静态文件(带白噪声)

在 Heroku 上部署 Django/静态文件的正确方法

在 django 1.8 中部署期间提供媒体文件