我正在尝试在Heroku上部署django应用程序(使用Whitenoise),除静态文件外,其他所有功能都可以正常工作。 sample project仅在首页显示标题“ Home”。如果正确加载了css文件,则标题将为红色,否则为黑色。
我得到了上面的项目,可以在virtualenv
,Docker
容器中使用DEBUG=False
,但是由于某些原因,I could not make it work on Heroku(如果标题为Red, CSS已正确加载)。
我尝试按照Heroku docs的建议使用django-heroku
,但是它开始抛出500服务器错误,并且在检查heroku logs
时显示找不到the css file的清单,这似乎是因为它将STATICFILES_STORAGE
设置为其他值。
settings或yml文件中是否存在某些设置错误?还是因为我正在部署Docker文件(而不是Procfile
),我需要使用其他设置?
更新1:
如评论中所建议。我尝试遵循this tutorial中所做的事情,其中完成了另外两项操作:
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
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的新手,所以我可能缺少明显的东西。
答案 0 :(得分:1)
感谢@Original BBQ Sauce,SO question和this Reddit post,终于解决了问题。它与我们运行collectstatic
的位置/时间有关。最初,我在release command
文件中以heroku.yml
的身份运行它,由于某种原因该文件未创建staticfiles目录。我是按照Django专业版书中的方法进行操作的。
现在,如果该命令改为在Dockerfile中运行,则会创建staticfiles目录并all should work fine。现在,该仓库具有新的有效设置。