我已经构建了我的第一个宝石,但我似乎无法正确安装它。我可以发出命令
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
答案 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-toto
,ceilingfish-toto
也会引发错误,因为没有lib/ceilingfish-toto.rb
文件(甚至没有lib
文件夹)。
答案 2 :(得分:0)
如果您要向另一个 gem 添加功能,请使用破折号。这通常对应于 require 语句中的 /(因此也对应于您的 gem 的目录结构)和主类或模块名称中的 ::。
如果是这种情况,如果您的 gem 名为 alpha-beta,您需要在 gem which 命令中添加一个斜杠 (/)
gem which alpha/beta
答案 3 :(得分:-1)
好的,所以这里的问题似乎是我的gemspec文件有问题。据我所知,绝对必须有一个名为lib/gem-name.rb
的文件,所以在这种情况下我需要lib/ceilingfish-toto.rb
。
对于其他一些宝石而言,这似乎并不正确。例如mime-types
或rest-client
,即使它们没有显示gem which
,它们确实可以正常工作。
我不确定这是否完全正确,我确信应该有一种方法可以在名称中使用带有连字符的宝石来正常运行。如果我发现我会回复并让你们都知道。