使用dokku部署Django应用程序时出现以下错误
Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
我发现无法为dokku容器运行heroku run python ./manage.py collectstatic --noinput
,但是当我尝试dokku run my app python ./manage.py collectstatic --noinput
时,静态文件已成功复制到STATIC_ROOT
文件夹,并且没有给出错误消息。
我可以通过将collectstatic
命令放入Procfile
:
web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
不过,我很想知道导致问题的原因以及如何进行调试。有什么想法吗?
答案 0 :(得分:9)
您的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 push”时,都会创建一个新容器,旧容器将被销毁。虽然这对您的静态文件不是问题,但除非您将其存储在其他位置,否则您的媒体将会丢失。