【问题标题】:Bundler not installing private gem from git repoBundler 没有从 git repo 安装私有 gem
【发布时间】:2014-02-10 13:32:07
【问题描述】:

我无法创建私有 gem,将其推送到私有 git 存储库,然后通过 :git 引用在我的 Gemfile 中使用该 gem。

问题是bundler(虽然没有给出错误)似乎没有为我安装 gem。

我发现我可以用任何宝石证明这一点,而不仅仅是我的。所以我将使用 'colorize' gem 来演示它,因为它已经在 github 和 ruby​​gems 上,并且是一个没有依赖关系的简单 gem。这是我使用 gem 的 test.rb 文件:

require 'colorize'
puts 'some blue text'.colorize(:blue)

案例一(可行):

Gemfile如下:

source 'https://rubygems.org'
gem 'colorize'

Bundle 运行愉快,ruby test.rb 输出蓝色文字就好了。

然后我运行gem uninstall colorize 在下一次测试之前进行清理。

案例二(失败):

现在,我将 Gemfile 更改为:

#source 'https://rubygems.org'
gem 'colorize', :git => 'git@github.com:fazibear/colorize.git'

请注意,我注释掉了 ruby​​gems.org 行,以确保我不会意外地从 ruby​​gems 获取 gem。

Bundle 再次运行正常,可以看到从 repo 中获取 gem。到目前为止,一切都很好。但是现在,ruby test.rb 失败了:require cannot load 'colorize'。似乎没有安装 gem,实际上如果我运行gem uninstall colorize 进行清理,它说没有安装 colorize!

那么我在这里做错了什么,或者没有理解?我想从 git repo 安装 gem,而不是 ruby​​gems,因为 gem 是私有 gem。

谢谢, ——格伦

【问题讨论】:

  • 运行bundle exec ./test.rb
  • 我的回答有帮助吗?

标签: ruby git rubygems bundler


【解决方案1】:

在我看来,您与 github 的 ssh 连接设置不正确。

尝试按照建议的here on github 执行ssh -T git@github.com,如果配置错误,这会给您一个错误。按照链接中提到的步骤,然后再次检查,然后一切正常。 FWIW,我尝试过并且能够以这种方式安装 gem。

如果您在服务器上安装此 gem,请在服务器本身上运行此命令。

解决此问题的替代方法(为每个帐户配置 ssh 密钥以使用 :git 中的 git@github.com url 的限制)是改用 https url(查看 this thread);然而,这超出了使用 ssh 密钥的所有目的。

【讨论】:

    【解决方案2】:

    当然,gem 没有在第二种情况下安装,这是正确的,因为它已被删除。但是当 bundler 克隆一个 git repo,或者使用 path 键来创建一个 gem 时,它不使用 ruby​​ 的 gem 实用程序,并且要知道 gem 是否安装成功,您只需运行,并查看已安装 gem 的路径:

    $ bundle show colorize
    /home/user/.rvm/gems/ruby-~.~.~@irb/gems/colorize-~.~.~
    

    如果 gem 没有正确安装,你会看到:

    Could not find gem 'colorize'.
    

    并且必须再次发出bundle install,如果有错误,则捕获错误。

    由于 bundler 不调用 gem 命令,因此不会将已签出的 gem 从 git repos 或 GitHub 放入 common gem pull,而是它在其拉动中创建了宝石本身,并控制了它。你应该使用 bundler 本身来运行你的脚本:

    $ bundle exec ./test.rb
    

    $ bundle exec ruby test.rb
    

    【讨论】:

    • -1 这不是 OP 所要求的,他无法安装 gem 本身。
    • @ansh0l 你能阅读作者提供的错误"require cannot load 'colorize'" 和作者消息中的文本Bundle again runs just fine, 吗?他们说安装成功通过。所以你错了。
    • 我不这么认为。在第二种情况下没有要卸载的 gem,这意味着没有安装 gem。无论如何,我会等待OP回答这个问题;如果我错了,或者他明天没有回来,我会删除我的反对票。
    • @ansh0l 当然,在第二种情况下没有安装 gem,这是正确的。它已被删除,但是当 bundler 克隆 git 存储库或使用 path 密钥创建 gem 时,它不使用 ruby​​ 的 gem 实用程序。要知道 gem 是否安装成功,您只需运行:bundle show gem_name
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多