Bundler没有从git repo安装私有gem

时间:2014-01-21 05:34:56

标签: ruby git rubygems bundler

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

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

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

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

CASE ONE(此作品):

Gemfile如下:

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

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

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

CASE TWO(失败):

现在,我将Gemfile更改为:

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

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

Bundle再次运行得很好,可以看到从回购中获得宝石。到现在为止还挺好。但现在,ruby test.rb失败了:require cannot load 'colorize'。似乎没有安装gem,事实上如果我运行gem uninstall colorize进行清理,它会说没有安装colorize!

那我在这里做错了什么,或者没理解?我希望从git repo安装gem,而不是rubygems,因为gem是私有宝石。

谢谢, - 格伦

2 个答案:

答案 0 :(得分:1)

当然宝石没有安装在第二种情况下,这是正确的,因为它已被删除。但是当 bundler 克隆git repo或使用路径键创建gem时,它不会使用ruby的 gem 实用程序,并且知道你刚刚运行的gem成功安装,并看到已安装的gem的路径:

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

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

Could not find gem 'colorize'.

并且必须再次发出bundle install,并且如果有的话会陷入错误。

由于 bundler 没有调用gem命令,因此不会将检出的gem从git repos或 GitHub 放入常见的gem pull中,而不是它在拉动中创建宝石本身,并控制它。您应该使用 bundler 本身运行脚本:

$ bundle exec ./test.rb

$ bundle exec ruby test.rb

答案 1 :(得分:1)

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

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

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

另一种克服此问题的方法(在git@github.com中为每个帐户配置ssh密钥以使用:git网址的限制)是使用https网址(结帐{{3 }});然而,这超过了使用ssh密钥的所有目的。