2010-02-14 94 views
6

我已经构建了我的第一块宝石,但我似乎无法正确安装它。我可以发出命令即使安装了它也找不到宝石的宝石

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 

这是非常奇怪的,因为如果我去看看我的宝石夹,我可以看到所有的文件安装在那里

# 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 

有谁知道这是什么原因?我认为这是抱怨,因为宝石名称中有一个连字符。您可以在此处看到gemspec http://github.com/ceilingfish/toto

+0

那么,确实没有'ceilingfish-toto'文件或共享库。 – badp

回答

6

gem which ceilingfish-toto通过gem require path查看名为ceilingfish-toto.rb的文件。由于没有一个,它什么都没有返回。什么可以为你工作是gem which toto,但由于lib/不包含在你的gem规范中,所以lib文件没有安装,所以它不存在。

重新运行rake gemspec可能会解决问题。另外,您可以使用gem list ceilingfish-toto这个应该显示它已安装的名称,不管它有什么文件(它也会列出安装的版本)来检查是否安装了gem。

+0

对于'宝石列表',使用_-d_作为“details”:'gem list -d ceilingfish-toto'来查看它的安装位置。 –

-1

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

对于其他一些宝石来说,这似乎并不正确。例如mime-typesrest-client,即使它们不显示gem which,但它们确实有效。

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

7

这不是连字符。

gem which搜索库文件在宝石,而不是宝石。比较:

$ 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 

桃色。请注意0​​的存在。

$ 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 

所以gem which ceilingfish-toto抛出一个错误,即使ceilingfish-toto安装,因为没有lib/ceilingfish-toto.rb文件(有没有连lib文件夹)。