使用Docker和Whitenoise在Heroku上部署时,不会加载Django静态文件

时间:2020-05-30 11:34:26

标签: python django docker heroku

我正在尝试在Heroku上部署django应用程序(使用Whitenoise),除静态文件外,其他所有功能都可以正常工作。 sample project仅在首页显示标题“ Home”。如果正确加载了css文件,则标题将为红色,否则为黑色。

我得到了上面的项目,可以在virtualenvDocker容器中使用DEBUG=False,但是由于某些原因,I could not make it work on Heroku(如果标题为Red, CSS已正确加载)。

我尝试按照Heroku docs的建议使用django-heroku,但是它开始抛出500服务器错误,并且在检查heroku logs时显示找不到the css file的清单,这似乎是因为它将STATICFILES_STORAGE设置为其他值。

settingsyml文件中是否存在某些设置错误?还是因为我正在部署Docker文件(而不是Procfile),我需要使用其他设置?

更新1:

如评论中所建议。我尝试遵循this tutorial中所做的事情,其中​​完成了另外两项操作:

  1. 设置STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
  2. 运行heroku plugins:install @heroku-cli/plugin-manifest

这样做时,我现在收到另一个HTTP 500错误:

/usr/local/lib/python3.7/site-packages/whitenoise/base.py:115:用户警告:在/ django-heroku-staticfiles / staticfiles /

中没有目录

现在我认为问题很明显。因此,我开始在heroku实例上运行一些命令:

$ heroku run ls -l /django-heroku-staticfiles
Running ls -l /django-heroku-staticfiles on ⬢ evening-lowlands-39080... up, run.5553 (Free)
total 160
-rw------- 1 u35232 dyno    179 May 30 12:21 Dockerfile
-rw------- 1 u35232 dyno 131072 May 30 12:21 db.sqlite3
-rw------- 1 u35232 dyno    235 May 30 12:21 docker-compose.yml
drwx------ 2 u35232 dyno   4096 May 30 12:21 hello_project
-rw------- 1 u35232 dyno    182 May 30 12:21 heroku.yml
-rwx------ 1 u35232 dyno    633 May 30 12:21 manage.py
drwx------ 4 u35232 dyno   4096 May 30 12:21 pages
-rw------- 1 u35232 dyno     93 May 30 12:21 requirements.txt
drwx------ 2 u35232 dyno   4096 May 30 12:21 templates

$ heroku run python manage.py collectstatic --clear --noinput
Running python manage.py collectstatic --clear --noinput on ⬢ evening-lowlands-39080... up, run.9686 (Free)

131 static files copied to '/django-heroku-staticfiles/staticfiles', 413 post-processed.

$ heroku run ls -l /django-heroku-staticfiles
Running ls -l /django-heroku-staticfiles on ⬢ evening-lowlands-39080... up, run.3303 (Free)
total 160
-rw------- 1 u20456 dyno    179 May 30 12:21 Dockerfile
-rw------- 1 u20456 dyno 131072 May 30 12:21 db.sqlite3
-rw------- 1 u20456 dyno    235 May 30 12:21 docker-compose.yml
drwx------ 2 u20456 dyno   4096 May 30 12:21 hello_project
-rw------- 1 u20456 dyno    182 May 30 12:21 heroku.yml
-rwx------ 1 u20456 dyno    633 May 30 12:21 manage.py
drwx------ 4 u20456 dyno   4096 May 30 12:21 pages
-rw------- 1 u20456 dyno     93 May 30 12:21 requirements.txt
drwx------ 2 u20456 dyno   4096 May 30 12:21 templates

为什么未创建staticfiles?也许我需要通过Docker运行命令?抱歉,我是Docker,Django和Heroku的新手,所以我可能缺少明显的东西。

1 个答案:

答案 0 :(得分:1)

感谢@Original BBQ SauceSO questionthis Reddit post,终于解决了问题。它与我们运行collectstatic的位置/时间有关。最初,我在release command文件中以heroku.yml的身份运行它,由于某种原因该文件未创建staticfiles目录。我是按照Django专业版书中的方法进行操作的。

现在,如果该命令改为在Dockerfile中运行,则会创建staticfiles目录并all should work fine。现在,该仓库具有新的有效设置。