在 Heroku 上上传的 Internet 应用程序不显示任何图形

Posted

技术标签:

【中文标题】在 Heroku 上上传的 Internet 应用程序不显示任何图形【英文标题】:Internet application uploaded on Heroku does not show any graphics 【发布时间】:2019-01-31 05:23:56 【问题描述】:

我在 heroku 上上传了我的整个应用程序,但我遇到了一个问题,没有显示任何照片。图片的路径是这样定义的:

src="blog.image.url"

因此,视图不应该只是本地的(我认为是这样)。

上传应用程序后,我对 django.admin 的看法也很奇怪。

任何帮助将不胜感激!我该如何解决这个问题(将显示图片)?我可以不重新上传应用程序(我的数据库已完成)吗?

【问题讨论】:

您需要检查并确保您的应用已通过这些出色的说明 devcenter.heroku.com/articles/django-assets 进行配置。幸运的是,这相对容易。 是否显示我需要的这些文件,例如 Amazon S3 或类似的东西? 这解释了使用 aws s3 来托管您的静态资产,如果那是您想要做的devcenter.heroku.com/articles/s3,如果您首先确定您的应用程序正在提供静态文件,请告诉我您是否难以实现这一点通过我提到的第一个链接,这部分让您感到困惑。 我还将向您推荐这 3 个链接以检查代码库的每个部分:***.com/questions/29360395/display-images-in-django、***.com/questions/12481172/… 和 ***.com/questions/40902890/django-image-src-not-found。希望这对您有所帮助并帮助您工作。 非常感谢您的帮助!一切正常! 【参考方案1】:

如果有人遇到同样的问题:

这为 Heroku 中的 CSS 等文件提供了支持

1.) 在文件 settings.py 中只需添加以下代码:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Static files (CSS, javascript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

现阶段重要链接: https://devcenter.heroku.com/articles/django-assets

提供多媒体展示

2.) 在 settings.py 中会添加:

#<-------------Elements Amazon S3 Beginning --------->

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'reviews/static'),
] #ok

AWS_ACCESS_KEY_ID = 'YYY'
AWS_SECRET_ACCESS_KEY = 'XXX'
AWS_STORAGE_BUCKET_NAME = 'name'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

AWS_S3_OBJECT_PARAMETERS = 
    'CacheControl': 'max-age=86400',


#AWS_LOCATION = 'static' #ok
#STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' #OK
#STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) # już wystęuje

DEFAULT_FILE_STORAGE = 'winerama.storage_backends.MediaStorage'  # <-- here is where we reference it

#<-------------Elements Amazon S3 END -------------->

2.1) 在同一个文件夹中添加一个文件 storage_backends.py

#FIle for amazon 3s
from storages.backends.s3boto3 import S3Boto3Storage

class MediaStorage(S3Boto3Storage):
    location = 'media'
    file_overwrite = False

*当然,我们还要创建amazon 3s账号。

现阶段重要链接: https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html(很好的教程如何使用amazon 3s来处理媒体文件和静态文件)

2.2)我在向 Heroku 添加应用程序时也使用这些命令:

heroku config:set AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY
heroku config:set S3_BUCKET_NAME=s'name'

现阶段重要链接: https://devcenter.heroku.com/articles/s3

3.) 在部署中它帮助了我 https://tutorial-extensions.djangogirls.org/en/heroku/ (我认为该链接很有帮助,但部署整个应用程序帮助我在论坛中获得以下答案)

    在部署期间禁用 collectstatic

    heroku config:set DISABLE_COLLECTSTATIC=1

    部署

    git push heroku master

    运行迁移(django 1.10 至少添加了一个)

    heroku run python manage.py migrate

    使用 bower 运行 collectstatic

    heroku run 'bower install --config.interactive=false;grunt prep;python manage.py collectstatic --noinput'

    为未来的部署启用集体静态

    heroku config:unset DISABLE_COLLECTSTATIC

    自行尝试(可选)

    heroku run python manage.py collectstatic

声明的作者tomcounsell 链接:Collectstatic error while deploying Django app to Heroku

请原谅我的英语不好。

【讨论】:

以上是关于在 Heroku 上上传的 Internet 应用程序不显示任何图形的主要内容,如果未能解决你的问题,请参考以下文章

将 Rails 应用程序上传到 heroku 后图像损坏

在 Heroku 上使用 Django 将大文件上传到 AWS S3 存储桶而没有 30 秒的请求超时

在 Heroku 上复制 Phoenix 文件

如何在已部署的 Heroku 应用上查看文件和文件结构

在 Heroku 上部署现有的 Django 应用程序

使用 Multer 将图像上传到 mongoDB 时 Heroku 出错