使用dokku部署Django应用程序时出现Collectstatic配置错误

时间:2014-07-30 14:25:13

标签: python django heroku dokku collectstatic

使用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

不过,我很想知道导致问题的原因以及如何进行调试。有什么想法吗?

1 个答案:

答案 0 :(得分:9)

您的settings.py文件中应该有四个名为MEDIA_ROOTMEDIA_URLSTATIC_ROOTSTATIC_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”时,都会创建一个新容器,旧容器将被销毁。虽然这对您的静态文件不是问题,但除非您将其存储在其他位置,否则您的媒体将会丢失。