不能与Heroku一起使用django-compress

时间:2017-02-16 00:09:09

标签: python django heroku

我有一个部署到Heroku的Django 1.9.6站点。当DEBUG=False我收到服务器错误(500)时。日志中没有包含有用的信息,因此我尝试使用DEBUG=True运行它。现在它工作正常。我认为这个问题可能与我的scss文件处理有关,这让我很困惑,我正在努力解决。我最近 - 除其他事项外 - 将COMPRESS_OFFLINE = True添加到我的设置文件中,并对其进行评论似乎可以缓解问题(尽管我的scss文件不起作用)。

我的一些静态settings.py。如果你需要更多,请告诉我 - 这对我来说是个谜。我试图尽可能地遵循this

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        # other finders..
        'compressor.finders.CompressorFinder',
    )

    STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

    MEDIA_URL = "/media/"
    MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
urls.py中的

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += [
    url(r'^media/(?P<path>.*)$', serve, {
        'document_root': settings.MEDIA_ROOT
    }),
]

urlpatterns += staticfiles_urlpatterns()

编辑:

我已经登录工作了,我已经确认这是一个压缩错误。我收到错误消息:

Internal Server Error: /

OfflineGenerationError at /
You have offline compression enabled but key "171c3b7763dbc51a465d996f7d920cf5" is missing from offline manifest. You may need to run "python manage.py compress".

这是我在本地获得的同样的事情,除了运行建议的命令解决了它。运行heroku run python manage.py compress没有效果(运行它没有错误)

4 个答案:

答案 0 :(得分:2)

首先关闭ALLOW_HOSTS的设置值,当调试关闭时,这不能为空。

ALLOWED_HOSTS = ['.mydomain.com', '.2nddomain.com']

因为你使用压缩插件: SET

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True

# this where the collectstatic and compress result output
# point your static alias to here 
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# in your production env: activate ur virtual environment then run the compress statics command
python manage.py compress
python manage.py collectstatic

当Debug关闭时,出于安全原因禁止所有异常,在设置文件中设置admin email以让django通过电子邮件发送所有未捕获的异常

SERVER_EMAIL = 'ur@from-email-address.com'
ADMINS = (
    ('Exceptions Email', 'destination@email.com'),
)

答案 1 :(得分:2)

compress生成的清单存储在我的.gitignore中,因此生产中的清单是陈旧的。将它添加到git存储库修复了所有内容。

答案 2 :(得分:1)

今天我尝试与'PythonAnywhere'共享一个网站。我遇到了同样的问题并修复了'Allowed_Host'的问题。

https://docs.djangoproject.com/en/1.10/ref/settings/#allowed-hosts

settings.py

 ALLOWED_HOSTS = ['*']

答案 3 :(得分:1)

将此添加到settings.py部分内的loggers,它应该会为您提供更多信息(这有助于我解决同样的问题)。

"django.request": {
  "handlers": ["console"],
  "level": "ERROR",
  "propagate": True
}

对于它的价值,这是我类似的settings.py设置:

MEDIA_URL = "http://%s.s3.amazonaws.com/" % (AWS_STORAGE_BUCKET_NAME)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = os.getenv("DJANGO_STATIC_HOST", "") + "/static/"
if DEBUG:
  STATIC_URL = "/static/"
STATICFILES_DIRS = (
  os.path.join(BASE_DIR, 'static'),
)

注意:我没有MEDIA_ROOTSTATICFILES_FINDERS,我也使用WhitenoiseCloudFront进行静态文件处理