无法推送到 Heroku:"Could not find rake-11.1.2 in any of the sources"

Cannot push to Heroku: "Could not find rake-11.1.2 in any of the sources"

我无法将我的项目推送到 Heroku 它告诉我我缺少 gem rake 11.1.2 但 运行 gem list rake 告诉我我确实安装了 rake 11.1.2。

此问题已通过在推送到 Heroku 之前从代码库中删除 vendor/cache 得到解决。这个可能令人困惑的结果是由 bundle 在不同情况下表现出的行为差异引起的。

在您的工作站上使用 bundle,该命令将显示 this behavior:

在安装 gem 时,Bundler 将检查 vendor/cache,然后检查您系统的 gem。如果 gem 未被缓存或安装,Bundler 将尝试从您在 Gemfile 中声明的源安装它。

这会产生 OP 预期的结果,一个有效的设置。

然而,Heroku 上的 bundle 命令正准备 运行 您的应用程序处于网络流量负载下,这是一组与开发完全不同的压力。在 Heroku 上,bundle 命令使用 --deployment 标志执行,这将显示 this behavior:

如果您有 运行 捆绑包,在 vendor/cache 目录中查看,并且没有任何 git gem,Bundler 将安装包时不要连接互联网。

Bundler 在这里做出假设,基于 vendor/cache 目录的存在,bundle pack 命令已经 运行,gem 是预先配置。由于 rake 不存在于 vendor/cache 中,这就是由此产生的错误。

OP 可能已通过从 vendor/cache 中删除相关的 gem 或发出 bundle pack 命令并将 gem 签入源代码管理来解决问题.第一种比较常见。