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



这可能是一个显而易见的问题,但我在谷歌上搜索最佳实践时遇到了困难。我使用的是Rails3.0和Bundler。

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

我把这个应用程序推到Heroku上,它就成功了。

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

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

    所以我查看了Gemfile.lock上的git日志,找到了回形针的前一个工作版本,并将该版本号放在了Gemfile中。被heroku所熟知,它又开始工作了。

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

问题一,取决于如何将gem声明到Gemfile中:例如,声明gem "omniauth",将在部署/编译时将最后一个omniauth gem绑定到heroku Gemfile.lock中,而如果指定gem "omniauth", "0.3.4",则在heroku上会得到精确的"0.3.4"。

铁路中不赞成使用自动售货>=3.2.2

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

最新更新