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

sil*_*ser 5 python django heroku collectstatic dokku

使用dokku部署Django应用程序时出现以下错误

Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
Run Code Online (Sandbox Code Playgroud)

我发现无法运行heroku run python ./manage.py collectstatic --noinputdokku容器,但是当我尝试时dokku run my app python ./manage.py collectstatic --noinput,静态文件已成功复制到该STATIC_ROOT文件夹,并且没有给出错误消息.

我可以通过将collectstatic命令放入Procfile以下内容来解决问题:

web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*uyn 9

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