部署到 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_ROOT
:collectstatic
是输出目录。源静态目录在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 时预编译资产时出错