【问题标题】:How do you install gems from Gemfile.lock file?如何从 Gemfile.lock 文件安装 gem?
【发布时间】:2012-08-26 06:55:11
【问题描述】:

我正在尝试运行从 Github 上删除的应用。

我已运行 bundle install 以从 Gemfile 安装所需的 gem。但是在运行应用程序时,一条错误消息告诉我安装的 gem 版本错误。

在检查 Gemfile.lock 时,我注意到这些版本比安装的 gem 旧。 (即,我安装了较新版本的 gem,而应用程序需要较旧的 gem。)

有没有一种按照 Gemfile.lock 文件中描述的版本快速安装所有 gem 的方法?或者有没有一种方法可以忽略该文件?

宝石文件:

   source 'http://rubygems.org'
   gem 'rails', "3.0.9"
   gem "sass"
   ..

Gemfile.lock:

 sass (3.1.1)
 ..

在上面的示例中,即使安装了 sass,应用程序也特别需要 3.1.1 版本。

【问题讨论】:

  • Bundler 应该始终安装Gemfile.lock 文件中的版本,这就是它的目的。您的系统上是否从未安装过这些 gem 的版本?
  • 我安装的 gem 比应用程序指定的要新。当我运行捆绑安装时,会安装最新的可用 gem 版本。
  • 只需删除锁定文件并再次捆绑。
  • 正如@Emrah 所说,如果项目的gemfile 写得很好,它应该声明所需的gems 版本。因此,您应该简单地删除 gemfile.lock 并运行捆绑程序,它应该可以工作。顺便说一句,这是什么项目?
  • 删除 Gemfile.lock 实际上不是最好的主意,因为它可能会导致 gem 版本的意外更新和不受支持的更新,尤其是对于 gem 版本定义松散且无法在主要版本中生存的旧应用程序版本更新。

标签: ruby-on-rails ruby-on-rails-3 github


【解决方案1】:

对于有效的Gemfile.lock 文件,单独使用bundle install 就足够了,除非某些特定的gem 版本已被拉出。在这种情况下,您需要寻找当前仍然可用的替代 gem 版本(通常bundle update name_of_yanked_gem 就足够了)。

关于sass 3.1.1,与其说应用程序需要那个特定版本,不如说它可能是上次生成/更新Gemfile.lock 时可用的最新版本,因为总体版本约束如Gemfile。正如您所列出的,sass 本身没有指定版本范围,但如果其他 gem 将 sass 作为依赖项,它们可能会施加进一步的限制。

完全忽略Gemfile.lock 不是一个好主意,因为在正常情况下,它将指定最后一次知道仍可用于应用程序的 gem 版本。

【讨论】:

  • 你确定捆绑安装就足够了吗?例如,如果安装了同一个 gem 的多个版本(通常是这种情况)怎么办?我以为这就是 bundler execute 的用途。
  • 不管怎样,如果Gemfile.lock已经生成,那么在解决了整体约束后,每个指定的gem只会包含一个版本。 bundle install 用于安装,bundle exec 用于执行。
  • 啊,好吧,我想你是在回答提问者最初的问题“我如何安装 gems”。我正在回答我认为他真正的问题是什么。
【解决方案2】:

试试这个..

bundle install --deployment

使用上述部署选项,bundle 然后从 Gemfile.lock 读取。

此外,gem 被安装到 directory vendor/bundle,而 bundle 目录是自动创建的

另外,在rails根目录下直接新建目录.bundle,并有一个名为config的文件,其内容如下...

BUNDLE_FROZEN: '1'
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'

希望以上内容对你有用。

【讨论】:

    【解决方案3】:

    确保您使用bundle execute rails server 运行网络服务器

    【讨论】:

    • +1 在这个上,你需要从 bundler 运行服务器,以便它使用正确的 gem。
    • 这不是bundle exec rails server,而是bundle exec rails server
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多