在 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 应用程序不显示任何图形的主要内容,如果未能解决你的问题,请参考以下文章