使用 dokku 部署 Django 应用程序时收集静态配置错误
-
21-12-2019 - |
题
使用 dokku 部署 Django 应用程序时,出现以下错误
Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
我发现无处可逃 heroku run python ./manage.py collectstatic --noinput
对于 dokku 容器,但是当我尝试时 dokku run my app python ./manage.py collectstatic --noinput
, ,静态文件成功复制到 STATIC_ROOT
文件夹并且没有给出错误消息。
我可以通过放置来解决问题 collectstatic
命令进入 Procfile
:
web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
不过,我很想知道是什么原因导致了问题以及如何调试它。有任何想法吗?
解决方案
您的 settings.py 文件中应该有四个设置,名为 MEDIA_ROOT
, MEDIA_URL
, STATIC_ROOT
和 STATIC_URL
.
我这样设置我的:
MEDIA_ROOT = 'media'
STATIC_ROOT = 'static'
MEDIA_URL = '/media'
STATIC_URL = '/static'
在创建的 docker 容器内,您将在 /app 下找到您的应用程序,这使得媒体路径 /app/media/ 和静态路径 /app/static/ 。
不幸的是,如果您没有在 git 中提交媒体和静态文件夹,则不会自动在 /app 下创建它。
由于 git 不允许您提交空文件夹(它只提交文件),因此我在项目中执行以下操作:
mkdir media static
touch media/.dir
touch static/.dir
git add media/.dir static/.dir
git commit -m 'Make media and static directories'
“touch”命令创建一个空文件,然后“git add”这两个新创建的文件并签入它们。
现在,当您推送时,目录将包含媒体和静态文件。请记住,每次“git Push”时,都会创建一个新容器,并销毁旧容器。虽然这对于静态文件来说不是问题,但除非将其存储在其他地方,否则您的媒体将会丢失。