如何锁定我的rails项目的宝石?

时间:2012-03-05 17:38:15

标签: heroku bundler

这可能是一个显而易见的问题,但我在谷歌上搜索最佳做法时遇到了麻烦。我使用的是Rails 3.0和Bundler。

我开始在我的工作笔记本电脑上开发Rails应用程序。我在我的gem文件中添加了gem名称并运行了bundle install。当我这样做时,我并没有太多关注我需要什么版本的宝石,我只是让Bundler安装最新版本。一切都很好。

我把这个应用程序推到了Heroku,它刚刚起作用。

  1. Heroku是否使用我的Gemfile.lock文件中定义的gem版本?或者是使用Gemfile获取最新版本并安装它们?

    然后我买了一台新笔记本电脑。所以我决定在那台笔记本电脑上克隆git repo。我安装了RVM,从GitHub克隆了repo,然后在本地运行了bundle install。问题是因为我没有在Gemfile中指定gem版本,运行bundle install下载了最新的gem版本。我做了一些CSS更改并推送到Heroku,并惊讶地发现应用程序坏了。显然,回形针宝石现在需要一些其他的宝石或其他东西。

    所以我查看了Gemfile.lock上的git日志,找到了paperclip的上一个工作版本并将该版本号放在Gemfile中。回到heroku,它再次工作。

  2. 如何避免此问题发生?我应该一直把宝石版本号放在我的Gemfile中吗?我应该出售我的宝石(我之前没有做过,怎么做)?

1 个答案:

答案 0 :(得分:1)

问题一,取决于如何将Gem声明为Gemfile:例如声明gem "omniauth",会在部署/编译时将最后一个omniauth gem捆绑到heroku Gemfile.lock中,而如果你指定gem "omniauth", "0.3.4"你在Heroku上会得到“0.3.4”。

供应商已在rails> = 3.2.2

中弃用

并且是的,最好将所有宝石版本指定到Gemfile中,当需要更新时,在将新版本放入Gemfile后,通过本地bundle update omniauth运行一次一个...