宝石虽然安装了但却找不到宝石

时间:2010-02-14 17:26:08

标签: ruby 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

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

4 个答案:

答案 0 :(得分:7)

gem which ceilingfish-toto查看名为ceilingfish-toto.rb的文件的gem require路径。由于没有一个,它什么都不返回。适用于您的是gem which toto,但由于您的gem规范中未包含lib/,因此未安装lib文件,因此它不存在。

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

顺便说一句,您可以使用gem list ceilingfish-toto来检查是否按名称安装了gem,它应该显示它已安装,无论它有什么文件(它还会列出已安装的版本)。< / p>

答案 1 :(得分: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

桃色。请注意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

因此,即使安装了gem which ceilingfish-totoceilingfish-toto也会引发错误,因为没有lib/ceilingfish-toto.rb文件(甚至没有lib文件夹)。

答案 2 :(得分:0)

根据gem naming recommendations

<块引用>

如果您要向另一个 gem 添加功能,请使用破折号。这通常对应于 require 语句中的 /(因此也对应于您的 gem 的目录结构)和主类或模块名称中的 ::。

如果是这种情况,如果您的 gem 名为 alpha-beta,您需要在 gem which 命令中添加一个斜杠 (/)

gem which alpha/beta

答案 3 :(得分:-1)

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

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

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