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 toto
是gem 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-types
或rest-client
,即使它们没有显示gem which
,它们确实可以工作。
我不确定这是否完全正确,我确信应该有一种方法可以在名称中使用带有连字符的gem来正确运行。 如果我发现我会回复并让你们都知道。