我有一个gem安装,但要求“gemname”不起作用。 为什么?

我真正问的问题是为什么要求不采用gem的名称。 另外,在没有的情况下,find秘密咒语要求该死的东西最简单的方法是什么!?

作为一个例子,如果我有memcache-client安装,那么我不得不要求它使用

 require 'rubygems' require 'memcache' 

你需要包含的文件是没有标准的。 不过也有一些常见的惯例,你可以按照下面的方法来尝试和使用:

  • 通常该文件被称为与gem相同的名称。 所以require mygem会工作。
  • 通常这个文件是gem的lib子目录中唯一的.rb文件,所以如果你能得到gem的名字(也许你正在通过2.1之前的rails项目中的vendor / gems),那么你可以检查#{gemname}/lib的.rb文件,如果只有一个,它是一个相当不错的赌注是要求

如果所有这些工作,那么你所能做的就是查看gem的目录(你可以通过运行gem environment | grep INSTALLATION | awk '{print $4}'并查找lib目录来查找,你可能需要阅读这些文件,并希望有一个解释该怎么做的评论

我的系统似乎也不知道RubyGems的存在 – 除非我告诉它。 'require'命令被RubyGems覆盖,所以它可以加载gem,但是除非你已经需要RubyGems,否则不知道该怎么做。 所以如果你正在写自己的,你可以这样做:

 require 'rubygems' require 'gem-name-here' 

如果你正在运行别人的代码,你可以在命令行上用:

 ruby -r rubygems script.rb 

此外,Ruby还有一个环境variables用于确定启动时应该加载的内容:

 export RUBYOPT=rubygems 

(来自http://www.rubygems.org/read/chapter/3。Orion Edwards指出了这个环境variables的东西)

(如果“需要'rubygems'不适合你,但是,这个build议是有限的帮助:)

需求必须映射到rubypath中的文件。 您可以通过运行“gem environment”find安装gem的位置(查找安装目录):

 kburton@hypothesisf:~$ gem environment RubyGems Environment: - RUBYGEMS VERSION: 1.2.0 - RUBY VERSION: 1.8.7 (2008-08-08 patchlevel 71) [i686-linux] - INSTALLATION DIRECTORY: /usr/local/ruby/lib/ruby/gems/1.8 - RUBY EXECUTABLE: /usr/local/ruby/bin/ruby - EXECUTABLE DIRECTORY: /usr/local/ruby/bin - RUBYGEMS PLATFORMS: - ruby - x86-linux - GEM PATHS: - /usr/local/ruby/lib/ruby/gems/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://gems.rubyforge.org/ kburton@editconf:~$ 

然后,您可以查找您正在尝试要求的特定.rb文件。 另外,你可以从irb打印$:的内容来查看ruby将search模块的path列表:

 kburton@hypothesis:~$ irb irb(main):001:0> $: => ["/usr/local/ruby/lib/ruby/site_ruby/1.8", "/usr/local/ruby/lib/ruby/site_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/site_ruby", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/vendor_ruby", "/usr/local/ruby/lib/ruby/1.8", "/usr/local/ruby/lib/ruby/1.8/i686-linux", "."] irb(main):002:0> 

另外,在安装gem之后,rails用户应该记得重新启动rails服务器

只有在使用gem安装gem时,才需要包含“rubygems”。 否则,秘密咒语就是开启irb并尝试不同的组合。 此外,您可以将-I选项传递给ruby解释器,以便在LOAD_PATH中包含gem的安装目录。 请注意, $ LOAD_PATH是一个数组,这意味着您可以在脚本中添加目录。

我真正问的问题是为什么要求不采用gem的名称。

安装一个gem把这些文件放到你的系统上。 它不会声称这些文件将被调用。
正如劳里指出的那样 ,有几个约定如何命名,但是没有什么可以强制这样做,许多gem作者不幸地不坚持。

另外,在没有的情况下,find秘密咒语要求该死的东西最简单的方法是什么!?

阅读文档为您的gem?
我发现使用Googlesearchrdoc gemname通常会find您的gem的官方rdocs ,通常会告诉您如何使用它。

Memcache可能不是最好的例子,因为他们认为你将会使用它,并且'require'已经为你完成了,但是我见过的大多数其他例子都显示了正确的'require'咒语

我碰到的一个问题是,实际构build的gem并没有包含它应该拥有的所有文件。

files的问题是在gemspec中有一个语法错误,但是在构build过程中没有引发错误。

只要在这里添加这个以防其他人遇到同样的问题。

自从安装OS X Lion之后,我也遇到了这个问题,发现即使我运行了下面的代码,我仍然会收到警告消息。 require 'rubygems' require 'nokogiri'

我尝试了这里和networking上发布的大量解决scheme,但是最终我的解决scheme只是按照http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html上的说明重新安装LibXML&LibXSLT,但确保我安装的LibXML版本与Nokogiri预期的版本匹配。

一旦我做完了,警告就消失了。

我有这个问题,因为我使用rvm,并试图使用错误的版本的ruby。 有问题的gem需要1.9.2,我已经设置2.0.0作为我的默认! 也许是一个愚蠢的错误,但其他人到达这个页面上可能会做。

观看gem的来源和检查lib目录。 如果没有rb文件,那么你必须在子目录中指向gem main rb文件:

 require 'dir/subdir/file' 

/lib/dir/subdir/file.rb