为什么Heroku不能在Windows中接受我的Gemfile.lock?

我在Heroku上部署了一个Rails应用程序。 我使用了几个不同的机器,我注意到当我添加新的依赖关系(以便重新生成Gemfile.lock )并在我的Windows计算机上进行bundle install时,推送到Heroku会失败,并显示以下错误:

  Unresolved dependencies detected; Installing... Windows Gemfile.lock detected, ignoring it. You have modified your Gemfile in development but did not check the resulting snapshot (Gemfile.lock) into version control ... 

Gemfile.lock是在版本控制下,但Heroku显然select忽略它,因为它是在Windows中创build的,然后抱怨它在几秒钟后丢失。 为什么会这样呢? 我该如何解决呢?

就像马特上面所说:

问题是Bundler为Windows创建了不同的Gemfile.lock 唯一的解决方案是在* NIX系统上创建并提交锁文件。

我会建议创建一个运行例如Ubuntu的虚拟机 – 也许使用Virtual Box 。 您甚至可以获得现成的虚拟机 – 例如这里 。

我通过打开Gemfile.lock并删除以下两行来修复我的问题:

 PLATFORMS x86-mingw32 

所以现在我只需要制作一个绑定的脚本,然后从锁定文件中删除它。

从Heroku Docs :

如果Gemfile的平台部分包含Windows条目,例如mswinmingw ,那么Gemfile.lock文件将被忽略。

刚刚通过这个问题奋斗了一段时间。

我修剪我的gemfile回到轨道,仍然有问题。 然后,认为heroku今天要求更新heroku宝石,我仔细看了一下heroku的变化。

看来1.9.2红宝石“竹”堆栈现在是默认的 – 我的应用程序仍然在1.8.7堆栈上运行。 所以我跑了“heroku stack:migrate bamboo-mri-1.9.2”并更新了堆栈到1.9.2–不是我想做的,但是你知道是什么,它解决了上面的问题。

当然,我不想要在1.9.2的堆栈上,所以我将它迁移到1.8.7堆栈,并且再次正确安装。 所以我认为这是一个解决方法 – 可能是一个过于复杂的 – 但似乎是“冲洗”,无论Heroku的错误是什么。 因为没有我在本地做的(而且我尝试了很多来自StackOverflow文章的东西)有任何作用,所以推动只是保持如上所述的失败。

所以是的,这解决了这个问题。 不要花太长时间。 但是怀疑有更多的Heroku知识渊博的开发者会发现更好的解决方法!

确保在安装软件包后将更改提交Gemfile.lock 在你的下一个push Heroku,新的宝石应该正确安装。