我无法创建私有宝石,将其推送到私有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是私有宝石。
谢谢, - 格伦
答案 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密钥的所有目的。