【问题标题】:Only Static IMAGES not showing up on Django application? Deployed to Heroku and using S3只有静态图像没有显示在 Django 应用程序上?部署到 Heroku 并使用 S3
【发布时间】:2016-04-02 00:04:42
【问题描述】:

我有一个已完成的 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 并显示在网站上,但我的静态图片仍然没有显示。上传的图片怎么能正常工作,而其他静态图片却不行?

【问题讨论】:

  • 确保您的 STATIC_URL 指向您的 S3 地址。
  • 确实如此。我知道这一点是因为我的 css 文件工作正常,并且它们位于同一个文件夹中。

标签: django heroku amazon-s3


【解决方案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'

【讨论】:

    【解决方案2】:

    服务静态文件实际上是 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 中。

    【讨论】:

    • 但这并没有太大帮助。当我在本地工作时,我的所有静态文件都运行良好。现在唯一不起作用的是生产中的静态图像。
    • 我开始弄明白了。我没有在我的 html 中正确引用图像。
    • @joe 你是怎么引用他们的?我也有同样的问题
    • @losee 仍有问题?我可以看一下编辑:究竟是什么不起作用?你也在用S3吗?我是如何引用我的 static_url、media_url 或者我是如何引用 html 中的图像的?
    猜你喜欢
    • 2020-09-24
    • 2018-09-23
    • 1970-01-01
    • 2020-12-31
    • 2017-11-04
    • 1970-01-01
    • 2020-11-26
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多