只有静态图像没有出现在Django应用程序上?部署到Heroku并使用S3

时间:2015-12-28 06:05:08

标签: django heroku amazon-s3

我有一个完成的Django应用程序,我正在尝试使用Heroku和S3进行生产,但我遇到了一些困惑。

到目前为止,我已经使用git将项目推送到Heroku,我已将Postgres数据库推送到HerokuPostgres并且这样做了,我已将静态文件(包括css和图像)上传到S3。

目前,当你转到Heroku应用程序(https://foobar.herokuapp.com/)时,页面加载,css工作,数据库工作。但是,静态图像没有显示出来。为什么会这样?

以下是 settings.py

中的几行
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': '###',
        'USER': '###',
        'PASSWORD': '###',
        'HOST': '###',
        'PORT': '###',
    }
}

DATABASES = {'default': dj_database_url.config(default='postgres://foobar')}

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# MEDIA_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/media/'

MEDIA_URL = '/media/'

# STATIC_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/static/'

# STATIC_URL = '/static/'

AWS_STORAGE_BUCKET_NAME = 'bucketname'
AWS_ACCESS_KEY_ID = 'foobar'
AWS_SECRET_ACCESS_KEY = 'foobar'

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

我正在寻找一些指导,说明为什么图像没有出现。

注意:用户上传的图像正在上传到S3并显示在网站上,但我的静态图像仍未显示。如何上传的图像可以正常工作但其他静态图像无法正常工作?

2 个答案:

答案 0 :(得分:1)

要在DEBUG = False时启用图像加载,请在urls.py文件中执行以下操作

from django.conf.urls import url

from django.views.static import serve

,然后在urlpatterns中添加这两个URL:

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

url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),

假设您的MEDIA_URL = 'media'STATIC_URL='static'

答案 1 :(得分:0)

提供静态文件实际上是Django令人难以置信的复杂和充满危险的事情之一。建议的方法是:https://docs.djangoproject.com/en/1.9/howto/static-files/,此处https://docs.djangoproject.com/en/1.9/howto/static-files/deployment/。我最终创建了一个show_static视图和一个与静态页面匹配的模式,所以只需将url(static_pattern,views.show_static)放入我的urls.py中。