部署到 Heroku 时 collectstatic 命令不运行,但设置非常好

Posted

技术标签:

【中文标题】部署到 Heroku 时 collectstatic 命令不运行,但设置非常好【英文标题】:collectstatic command not run when deploying to Heroku, but setup is perfectly fine 【发布时间】:2016-04-11 15:06:10 【问题描述】:

我已经验证的事情:

我的collectstatic 目录(是的,我这样称呼它,以减少与static 源目录的混淆)在我的仓库中(通过.gitkeep 文件)(如heroku documentation 中所建议)李> heroku run python manage.py collectstatic --dry-run --noinput 有效(建议here) collectstatic 被强制禁用:heroku config:add DISABLE_COLLECTSTATIC=0 我正在推送一个新的提交(所以 heroku 实际上正在部署)

仍然没有运行collectstatic。我还能检查什么?

编辑

另外,我在settings.py 中正确定义了STATIC_ROOT。下面的相关部分:

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic/')

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

编辑2

我安装的应用程序只是股票 django 1.9:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

EDIT3

我必须提到的一件事,这可能是相关的:DISABLE_COLLECTSTATIC 以前设置为 1(因此被强制禁用)对于这个 Heroku 应用程序,但我已确保它现在设置为 0。

也许 Heroku 中的错误阻止它使用最新值?我想检查这一点的唯一方法是创建一个新的 heroku 应用程序。

【问题讨论】:

您是否将collectstatic 目录添加到您的settings.py 中的STATIC_DIRS 中? @Remi:当然,问题已编辑。实际上不是STATICFILES_DIRS(这就是你的意思,对吗?),而是STATIC_ROOTcollectstatic 是输出目录。源静态目录在STATICFILES_DIRS 中定义,我只称它们为static 您是否尝试过像这样专门添加目录:STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), os.path.join(BASE_DIR, 'collectstatic'), )跨度> 不,我不想这样做,因为这没有意义。 collecstatic不是源目录,收集静态文件时不应该搜索(这就是STATICFILES_DIRS的意思) 嗯好的,明白了。而且您只有一个正在使用的设置文件? 【参考方案1】:

所以,不知道发生了什么,但是创建一个新的 Heroku 实例并使用空配置推送到它实际上会触发 collectstatic。

我怀疑 Heroku 没有正确评估对 DISABLE_COLLECTSTATIC 的更改。

编辑

实际上,DISABLE_COLLECTSTATIC=0 似乎阻止了collectstatic 运行。要确保 collectstatic 运行,请执行以下操作:

heroku config:unset DISABLE_COLLECTSTATIC

我会说Heroku documentation 有点令人困惑,因为它似乎暗示DISABLE_COLLECTSTATIC=0 实际上会运行 collectstatic - 但它不会。

【讨论】:

以上是关于部署到 Heroku 时 collectstatic 命令不运行,但设置非常好的主要内容,如果未能解决你的问题,请参考以下文章

将 Bot 部署到 Heroku 时如何解决 TypeError?

将 parse-dashboard 部署到 heroku 时出错

使用 webpack 部署到 Heroku 时预编译资产时出错

将 vue 应用程序部署到 heroku 时出错

尝试将带有顺风的 MERN 堆栈部署到 Heroku 时构建失败

应用程序在开发中有效,但在部署到 heroku 时无效