2015-10-13 67 views
2

試圖部署Django應用程序到Heroku使用whitenoisedjango壓縮機Whitenoise和Django壓縮器導致404壓縮文件

通過DEBUG = FalseCOMPRESS_ENABLED = True將其部署到生產環境中,可以毫無問題地訪問我的所有靜態資產。然而,所有的壓縮文件返回404,如:

HTTP://*.herokuapp.com/static/CACHE/css/fbfaa35dc638.css未能 加載資源:服務器的狀態爲迴應404(未找到)

要麼使DEBUG或禁用COMPRESS_ENABLED解決問題,當然不是我想要的。

我也在設置STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage',但改變這並沒有幫助。

某些設置(注意我有例如base.pylocal.py,等等。這就是爲什麼我需要的路徑額外../一個設置目錄):

STATIC_URL = '/static/' 

STATIC_ROOT = os.path.join(BASE_DIR, '../staticfiles') 

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, '../static'), 
) 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'compressor.finders.CompressorFinder', 
) 

在我的基本模板:

{% compress css %} 
<link rel="stylesheet" href="{% static 'css/app.css' %}"> 
{% block css %}{% endblock %} 
{% endcompress %} 

[...] 

{% compress js %} 
<script src="{% static 'js/main.js' %}"></script> 
{% block js %}{% endblock js %} 
{% endcompress %} 

同樣,將它們移出壓縮塊可以解決問題。只是找不到壓縮的文件。

任何想法?

編輯

我忘了提一個設置我加爲每deployment checklist,即這樣的: https://docs.djangoproject.com/en/1.8/ref/templates/api/#django.template.loaders.cached.Loader

TEMPLATES[0]['OPTIONS']['loaders'] = [ 
    (
     'django.template.loaders.cached.Loader', [ 
      'django.template.loaders.filesystem.Loader', 
      'django.template.loaders.app_directories.Loader', 
     ] 
    ), 
] 

刪除此設置又使得網頁的工作。然而,JS和CSS文件沒有被壓縮......發生了什麼事?

+0

我有像你這樣的確切問題,但不是在Heroku上。我使用django cookiecutter項目,但問題是相同的。 「CACHE」文件夾中的任何文件都會返回一個404.任何想法爲什麼? –

回答

7

這似乎是一個已知的問題。

根據Squebe的說法:「Compressor的在線模式在Heroku上不起作用,因爲Whitenoise只在應用程序加載時檢查靜態文件夾(請參閱我對問題#680的評論)。在生產中使用壓縮機時,我認爲您需要在離線模式下使用它,並在應用程序使用Heroku的後編譯鉤子加載之前運行python manage.py compress。「

No way to get this to work on Heroku #486

+0

我明白了,謝謝你的信息。與此同時,我轉而使用django-pipeline,它可以開箱即用! – cpury

+0

我也會這麼做,謝謝 – Ryan

+4

謝謝@Ryan。這對我有效。以防其他人需要它:只需在你的'bin/post_compile'處添加[this file]的內容(https://github.com/nigma/heroku-django-cookbook/blob/master/bin/run_compress)回購 - 至少這對我來說是訣竅。另外,因爲我使用'。buildpacks'和我需要'bower_components'在_compression_之前存在,我顛倒了順序,讓NodeJS在第一行和Python在第二行在'.buildpacks'。 – cuducos