gem虽然安装了但却找不到gem

我已经构建了我的第一个gem,但我似乎无法正确安装它。 我可以发出命令

sudo gem install ceilingfish-toto 

哪个产生输出

 Successfully installed ceilingfish-toto-0.3.6 1 gem installed 

但是当我输入gem which ceilingfish-toto 。 我得到了输出

 Can't find ruby library file or shared library ceilingfish-toto 

这很奇怪,因为如果我去查看我的gems文件夹,我可以看到安装在那里的所有文件

 # ls -l /opt/local/lib/ruby/gems/1.8/gems/ceilingfish-toto-0.3.6/ total 48 -rw-r--r-- 1 root admin 1053 14 Feb 17:16 LICENSE -rw-r--r-- 1 root admin 6166 14 Feb 17:16 README.md -rw-r--r-- 1 root admin 879 14 Feb 17:16 Rakefile -rw-r--r-- 1 root admin 6 14 Feb 17:16 VERSION -rw-r--r-- 1 root admin 2477 14 Feb 17:16 ceilingfish-toto.gemspec drwxr-xr-x 7 root admin 238 14 Feb 17:16 test 

有谁知道这会导致什么? 我认为这是抱怨,因为gem名称中有一个连字符。 你可以在http://github.com/ceilingfish/toto看到gemspec

gem which ceilingfish-toto通过gem查找的gem需要一个名为ceilingfish-toto.rb的文件的路径。 由于没有一个,它什么都不返回。 什么对你gem which totogem which toto ,但是由于lib/未包含在你的gem规范中,所以lib文件没有安装,所以它不存在。

重新运行rake gemspec可能会解决问题。

另外,您可以使用gem list ceilingfish-toto检查gem是否按其名称安装,它应该显示它已安装,无论它有什么文件(它还会列出已安装的版本)。

这不是连字符。

gem which 在gem中搜索库文件,而不是gem 。 相比:

 $ gem which haml /home/dave/.gem/ruby/1.8/gems/haml-3.0.12/lib/haml.rb $ ls haml-3.0.12/lib/h* haml haml.rb haml.rbc 

桃色的。 注意lib/haml.rb的存在。

 $ gem which rails ERROR: Can't find ruby library file or shared library rails $ ls rails-2.3.8/lib/r* rails_generator.rb railties_path.rb rubyprof_ext.rb ruby_version_check.rb 

没有lib/rails.rb 。 但试试:

 $ gem which railties_path # not a gem /home/dave/.gem/ruby/1.8/gems/rails-2.3.8/lib/railties_path.rb 

所以即使安装了ceilingfish-toto ,由于没有lib/ceilingfish-toto.rb文件(甚至没有lib文件夹) gem which ceilingfish-toto抛出错误。

好的,所以这里的问题似乎是我的gemspec文件有问题。 从我所知道的,绝对必须是一个名为lib/gem-name.rb的文件,所以在这种情况下我需要lib/ceilingfish-toto.rb

对于其他一些gem来说,这似乎并不正确。 例如mime-typesrest-client ,即使它们没有显示gem which ,它们确实可以工作。

我不确定这是否完全正确,我确信应该有一种方法可以在名称中使用带有连字符的gem来正确运行。 如果我发现我会回复并让你们都知道。