使用 Django 在 Heroku 上接收带有图像的特定页面的服务器错误 500(由 WhiteNoise 提供静态服务)

Posted

技术标签:

【中文标题】使用 Django 在 Heroku 上接收带有图像的特定页面的服务器错误 500(由 WhiteNoise 提供静态服务)【英文标题】:Receive Server Error 500 on Heroku with Django for specific pages with images (static served by WhiteNoise) 【发布时间】:2019-07-04 06:19:45 【问题描述】:

在过去的几个小时里,我一直在通过 Stack Overflow 搜索修复,但大多数关于服务器错误 500 的帖子都无法为我提供修复。 Django 找不到静态图片并返回 500。图片在 static/css/images 中。

例如,我尝试获取https://monkeyparliament.herokuapp.com/about/。日志返回:

2019-02-10T17:09:33.362724+00:00 app[web.1]: ValueError: Missing staticfiles manifest entry for 'css\images\donate.png'
2019-02-10T17:09:33.363611+00:00 app[web.1]: 10.31.121.50 - - [10/Feb/2019:17:09:33 +0000] "GET /about/ HTTP/1.1" 500 27 "https://monkeyparliament.herokuapp.com/music/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/72.0.3626.96 Safari/537.36"

但是当我https://monkeyparliament.herokuapp.com/music/ 时,它似乎可以在静态文件夹中找到 css/js/fonts。随意检查页面源代码。

我的静态图像由 WhiteNoise (http://whitenoise.evans.io/en/stable/) 提供。正如您在上面看到的,WhiteNoise 在要求中。 settings.py 中的 MIDDLEWARE 在 django.middleware.security.SecurityMiddleware 下方添加了“whitenoise.middleware.WhiteNoiseMiddleware”。

为什么找不到我的图片?

过程文件

web: gunicorn websitemp.wsgi:application --log-file -

Requirements.txt

dj-database-url==0.5.0
Django==2.0.10
gunicorn==19.9.0
psycopg2==2.7.7
pytz==2018.9
whitenoise==4.1.2

结构

website 是应用程序,websitemp 是项目

Github 上的项目

如果您想查看完整结构,您可以在 github 上找到所有文件:https://github.com/DennisVerstappen/websitempdjango

提前致谢!

【问题讨论】:

donate.png 是否可用,请检查您的模板。 不确定你的意思。 donate.png 放在 static/css/images 中。该模板对 donate.png 有以下引用: 我浏览了你的github。您是否运行了 collect static 并且您的应用正在本地系统中查找图像?或者我有更好的解决方案。从您的设置中删除STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) 并在您的应用程序website 中添加静态文件夹,而不是将其添加到项目文件夹中。现在你可以添加% static 'css/images/donate.png' % 【参考方案1】:

在您的主目录中创建一个空文件夹staticfiles

之后运行python manage.py collectstatic

之后应该填充来自所有应用程序的所有静态资产。

注意:实际上,您可以将 static 文件夹移动到 Website-Application 中 - 应该没有区别

【讨论】:

【参考方案2】:

感谢您的考虑。在尝试了您的解决方案后,我注意到其中的斜线

% static 'css\images\donate.png' % 

与日志中其他 Python 文件中的斜线不同。将反斜杠更改为正斜杠解决了我的问题。我使用的文件夹系统表示法(Windows)与 Heroku 使用的不同。使用下面的符号是有效的。

% static 'css/images/donate.png' %

【讨论】:

以上是关于使用 Django 在 Heroku 上接收带有图像的特定页面的服务器错误 500(由 WhiteNoise 提供静态服务)的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上带有 Postgresql 的 Django - settings.DATABASES 配置不正确。请提供名称值

Heroku 上带有 gunicorn 服务器的 Django 项目不提供静态文件

如何调试带有whitenoise,gunicorn和heroku的Django静态文件?

Django:Heroku 上的生产应用程序找不到带有“路径”urlpattern 的模板

带有 Django 的 Heroku 上的 Memcached:无法安装 pylibmc / memcacheify

django 在 heroku 上部署单独的 web 和 api 端点