使用 dokku 部署 Django 应用程序时收集静态配置错误

Posted

技术标签:

【中文标题】使用 dokku 部署 Django 应用程序时收集静态配置错误【英文标题】:Collectstatic configuration error when deploying Django app with dokku 【发布时间】:2014-09-22 05:55:22 【问题描述】:

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

您的 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 add”两个新创建的文件并将它们签入。

现在,当您推送时,目录将在那里包含媒体和静态文件。请记住,每次您“git push”时,都会创建一个新容器,并销毁旧容器。虽然这对您的静态文件来说不是问题,但您的媒体将会丢失,除非您将其存储在其他地方。

【讨论】:

以上是关于使用 dokku 部署 Django 应用程序时收集静态配置错误的主要内容,如果未能解决你的问题,请参考以下文章

从 SSH 重新启动 Dokku 应用程序的正确命令是啥?

如何在 dokku node.js 应用程序中运行 docker 命令?

锁屏时收不到通知

Dokku keycloak 重定向过多

sh Userfull dokku命令

sh dokku - 设置