【发布时间】:2012-03-05 17:38:14
【问题描述】:
这可能是一个显而易见的问题,但我无法在谷歌上搜索最佳做法。我正在使用 Rails 3.0 和 Bundler。
我开始在我的工作笔记本电脑上开发 Rails 应用程序。我在我的 gem 文件中添加了 gem 名称并运行了 bundle install。当我这样做时,我并没有太在意我需要什么版本的 gems,我只是让 Bundler 安装最新版本。一切正常。
我将这个应用程序推送到 Heroku 并且它运行良好。
-
Heroku 是否使用我的 Gemfile.lock 文件中定义的 gem 版本?还是使用 Gemfile 获取最新版本并安装它们?
然后我买了一台新笔记本电脑。所以我决定也克隆那台笔记本电脑上的 git repo。我安装了 RVM,从 GitHub 克隆了 repo,然后在本地运行 bundle install。问题是因为我没有在 Gemfile 中指定 gem 版本,运行
bundle install下载了最新的 gem 版本。我做了一些 CSS 更改并推送到 Heroku,然后惊讶地发现应用程序坏了。显然,回形针 gem 现在需要一些其他 aws gem 或其他东西。所以我查看了 Gemfile.lock 上的 git 日志,找到了之前工作版本的回形针,并将该版本号放入 Gemfile。重新推送到heroku,它又开始工作了。
如何避免此问题发生?我应该总是将 gem 版本号放在我的 Gemfile 中吗?我应该出售我的宝石(我以前没有做过,怎么做)?
【问题讨论】:
-
您确定它安装了最新版本吗?您没有将 Gemfile.lock 文件签入您的存储库吗?
-
是的,我确实将 Gemfile.lock 签入了我的仓库。但是当我在我的新笔记本电脑上运行 bundle install 时,它获取了最新的 gem 版本并覆盖了本地 Gemfile.lock。
-
如果这是实际发生的情况,那么您在 Bundler 中遇到了一个错误。确保您使用的是最新版本的 Bundler,如果您可以明确重现此行为,请report it。
-
hmm...所以你的意思是,一旦 Gemfile.lock 存在,运行 bundle install 将使用锁文件中的 gem。包括 heroku 何时部署。所以我想我一定在某个时候运行过捆绑更新......
-
是的,这就是锁定文件的用途。运行
bundle update时使用Gemfile中指定的版本约束,否则使用锁文件。