我有一个完成的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并显示在网站上,但我的静态图像仍未显示。如何上传的图像可以正常工作但其他静态图像无法正常工作?
答案 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中。