【问题标题】:How do I lock down the gems for my rails project?如何锁定我的 rails 项目的 gem?
【发布时间】:2012-03-05 17:38:14
【问题描述】:

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

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

我将这个应用程序推送到 Heroku 并且它运行良好。

  1. 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,它又开始工作了。

  2. 如何避免此问题发生?我应该总是将 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中指定的版本约束,否则使用锁文件。

标签: heroku bundler


【解决方案1】:

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

在 rails >= 3.2.2 中不推荐使用供应商

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

【讨论】:

  • 为什么不推荐使用 vendoring?如果旧版 gem 不再普遍可用会怎样?
  • 这不是真的。唯一会修改 Gemfile.lock(假设它已经存在)的命令是 bundle update
  • @sketchfemme 供应商已被弃用,因为它是一种糟糕的管理方式。只要 ruby​​gems.org 启动并运行,Rubygems 上可用的 Gem 将继续可用,所以我并不真正看到那里的担忧。在 Rails 4.0 中,供应商将消失。
  • 对 Gemfile 中的特定 gem 进行更改后,下一个包安装将尝试更新快照中的 gem (Gemfile.lock),而不强制更新任何其他 gem在您的 Gemfile 中。如果您未在 Gemfile 中指定版本,则稍后在不同平台(笔记本电脑或云提供商...)上运行捆绑时间后,很容易得到不同的 Gemfile.lock
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2021-05-09
  • 1970-01-01
相关资源
最近更新 更多