2012-08-26 81 views
1

我在Heroku上有一個Django應用程序,它具有分段和生產環境。 S3上託管靜態文件。我正在精簡我的部署過程,並計劃在手動工作之後設置fabfiles。在多種環境中使用collectstatic

如何配置collectstatic以推送到多個位置?如果我在本地運行它,它會使用我的開發設置(使用本地STATIC_ROOT)。如果我在我的一個Heroku應用程序(heroku run ./manage.py collectstatic)上運行它,那麼它不能獲取這些文件(因爲.slugignore確保它們永遠不會被推送到Heroku)。如果我在我的Procfile中包含collectstatic,同樣適用。

我也使用django-pipeline,雖然它還沒有做很多,因爲我卡在collectstatic位。

UPDATE 針對薩芬的問題,我想傳遞一個設置文件作爲一個選項collectstatic:./manage.py collectstatic --settings=project.settings.prod,卻得到了一個錯誤:Unknown command: 'collectstatic'我檢查了服務器上,雖然和安裝的應用不包括django.contrib.staticfiles我也可以遠程運行collectstatic,所以我不確定會導致什麼結果。

回答

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' 

settings.py:

import local_settings 
+0

我打算成立CloudFront的,但還沒有 - 沒有gzip的支持,實現不同的東西比django中間件(django.middleware.gzip.GZipMiddleware)? – Mike

0

我剛剛說的Upload Media from Heroku to Amazon S3類似的問題。如果您自定義設置以考慮環境變量,則可以在本地使用文件系統存儲後端,並在推送到Heroku時使用S3存儲後端。這會收集並上傳你的靜態文件,當你編譯slu slu時。

2

您可以設置環境變量DJANGO_SETTINGS_MODULE所以你不需要到處指定--settings:

heroku config:set DJANGO_SETTINGS_MODULE=project.settings.prod 
+0

無價。謝謝。 – glaucon