1

我在 Heroku 上有一个 Django 应用程序,带有登台和生产环境。静态文件托管在 S3 上。我正在简化我的部署过程,并计划在我手动工作后设置 fabfile。

如何配置 collectstatic 以推送到多个地方?如果我在本地运行它,它会使用我的开发设置(使用本地 STATIC_ROOT)。如果我在我的 Heroku 应用程序之一上运行它(heroku run ./manage.py collectstatic),那么它就无法抓取文件(因为 .slugignore 确保它们永远不会被推送到 Heroku)。如果我在我的 Procfile 中包含 collectstatic,这同样适用。

我也在使用 django-pipeline,虽然它还没有做太多,因为我被困在 collectstatic 位上。

更新 为了回答 Marat 的问题,我尝试将设置文件作为选项传递给 collectstatic: ./manage.py collectstatic --settings=project.settings.prod,但出现错误:Unknown command: 'collectstatic'我检查了服务器,但已安装的应用程序确实包含 django.contrib.staticfiles 并且我也可以远程运行 collectstatic,所以我不确定是什么原因造成的。

4

3 回答 3

2

您可以设置环境变量 DJANGO_SETTINGS_MODULE 这样您就不需要在任何地方指定 --settings :

heroku config:set DJANGO_SETTINGS_MODULE=project.settings.prod
于 2013-06-05T19:22:04.980 回答
0

我刚刚回答了关于从 Heroku 上传媒体到 Amazon S3的类似问题。如果您自定义设置以考虑环境变量,则可以在推送到 Heroku 时使用本地文件系统存储后端和 S3 存储后端。这将在编译您的 slug 时收集并上传您的静态文件。

于 2013-01-22T17:05:48.987 回答
0

首先,如果您要通过 CloudFront 提供静态服务,您可以使用自定义源并始终使用本地 STATIC_ROOT。实际上它比 S3 源有一些优势,例如 gzip 支持。

您可以做的另一件好事是将环境相关设置放在单独的文件中,然后将其导入 settings.py,例如:

local_settings.py(不在项目存储库中,但您可以拥有 local_settings.py.example):

#environment dependent settings
DATABASES = { .. }
CACHES = { .. }
STATIC_ROOT = 'your_path/static'

设置.py:

import local_settings
于 2012-08-26T04:56:12.600 回答