【问题标题】:Retrieve sources for all installed gems检索所有已安装 gem 的源
【发布时间】:2011-05-16 10:02:40
【问题描述】:

我正在将我的所有项目切换到使用相当出色的 rvm 和 bundler。在其中一个上,我想基本上镜像托管应用程序的服务器上的 gem 环境。

为了做到这一点,我做了以下事情:

  • 进入服务器

-did "gem list" 这给了我一大串像

这样的宝石
actionmailer (2.2.2)
actionpack (2.2.2)
activerecord (2.2.2)
activeresource (2.2.2)
activesupport (2.2.2)
amatch (0.2.3)
archive-tar-minitar (0.5.2)
etc
  • 将此复制到我本地项目文件夹中的新 Gemfile 中
  • 进行了一些查找和替换以将格式更改为对 Gemfile 友好的格式
  • 将我知道的 gem 源添加到 Gemfile 的顶部
  • 是否“捆绑安装” -失败

失败是因为总是有一些 gem 找不到,因为没有指定源。所以,我想知道的是

a) 在服务器上,有没有办法查询已安装的 gem 以获取每个安装源的列表?

b) 这甚至是一个好方法吗?以某种方式导出服务器上的 gem,并将它们直接安装在我的新 gemset 中,而不是尝试从远程源安装它们会更好吗?还是别的什么?

感谢任何建议 - 最大

【问题讨论】:

  • 顺便说一句,如果我在服务器上执行gem source,我只会得到http://gems.rubyforge.org/

标签: rubygems gem rvm bundler


【解决方案1】:

冒着明显的风险,Gemfile 中需要一些在指定源中不可用的 gem。在文件的顶部应该有一个或多个来源:

source 'http://rubygems.org'

你可以试试添加

source "http://gems.rubyforge.org"

如果 bundler 仍然找不到 gem,您可以尝试用谷歌搜索 gem 名称 - 看看它是否被重命名或其他什么。但是,如果它不在那里,我会感到惊讶,除非它是您在本地手动滚动的。如果你真的卡住了,你可以从服务器上复制 gem 并将其包含在项目的 vendor/gems 目录中,在这种情况下,你需要在 Gemfile 中指定它的路径(参见捆绑器手册)。

请记住,您没有必须指定所有 gem 的依赖项;需要 rails 将自动需要 activerecord、activeresource 等。如果您愿意,可以指定它们,但如果升级依赖的 gem,那么如果它们不匹配,则必须编辑依赖项的版本。

为了回答您最初的问题,我认为没有办法追踪安装在机器上的 gems 的确切来源。

【讨论】:

  • 感谢@Henry - 我知道这一点,但它仍然是猜测。我想做的是获取我当前宝石的实际来源列表,跳过猜测/侦探工作。
  • 正如我所说,我认为这是不可能的。我的答案只是次优选择。
【解决方案2】:

您可以使用gem list -d 并至少列出主页

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多