【问题标题】:Why doesn't the command `gem list` include gems installed with bundler's :git option?为什么命令 `gem list` 不包含使用 bundler 的 :git 选项安装的 gem?
【发布时间】:2013-12-16 01:09:57
【问题描述】:

在我们的 rails 3.2 Gemfile 中,安装了一些带有选项 :git 的 gem,指向 github 上的 repo,例如:

gem 'ruote', :git => 'http://github.com/jmettraux/ruote.git'

bundle install 之后,我们输入gem list 以列出所有已安装的gem。但是 gem list 没有将 ruote 列为已安装的 gem。事实上,根本没有列出ruote。我们注意到同样的事情也发生在所有安装了选项 :git 指向 github 上的 repo 的 rails engines 上。为什么 gem list 没有列出所有已安装的 gem?如何保证 ruote 安装正确?

【问题讨论】:

    标签: ruby git gem bundler


    【解决方案1】:

    根据Bundler Documentation,来自git 源的gem 不会出现在gem list 中,因为gem 命令无法处理它们,因此Bundler 必须自己完成所有工作。 Bundler 将这些 gem 存储在它自己的位置。 (注意这个位置与当前项目无关,默认在~/.bundler/...。)

    如果bundle install 完成且没有错误,您可以看到它已安装。您也可以使用 bundle show 查看 Bundler 为您设置的 Gem 列表。

    【讨论】:

    • 但是如何使用这些宝石呢?我的意思是,一个简单的“要求”找不到它们。
    • @refaelos 使用bundle exec 运行您的应用程序,然后只需一个简单的require 即可。
    • 谢谢@Moshe Katz!我注意到在文件中也需要捆绑/设置。
    • @refaelos 是的,这也是一种方法。我使用bundle exec 方式,因为如果我愿意,它允许我使用系统gem 而不是捆绑的gem 进行测试。
    【解决方案2】:

    gem list 不是显示为应用安装的 gem 的正确方式,因为它会显示系统范围的 gem。

    要查看此应用程序及其版本的 Gems,请查看 Gemfile.lock。您将在那里获得最准确的信息。

    【讨论】:

      【解决方案3】:

      gem list 正在向您展示您机器上安装的所有 gem。

      当您的 gem 的位置与 Ruby 的 gem 不同时,Bundler 会将这些存储在项目本地而不是系统范围内。

      【讨论】:

      • bundler 如果您使用 --deployment,则仅在本地存储项目的 gem。
      猜你喜欢
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      相关资源
      最近更新 更多