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

时间:2008-09-25 12:01:14

标签: ruby rubygems

我真正问的问题是为什么要求不采用宝石的名称。而且,如果没有,那么最简单的方法就是找到秘密咒语来要求该死的东西!?

作为一个例子,如果我安装了memcache-client,那么我必须使用

来要求它
require 'rubygems'
require 'memcache'

11 个答案:

答案 0 :(得分:47)

我的系统似乎也不了解RubyGems的存在 - 除非我告诉它。 'require'命令被RubyGems覆盖,因此它可以加载gems,但除非你已经需要RubyGems,否则它不知道如何做到这一点。所以,如果你自己编写,你可以这样做:

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

如果您正在运行其他人的代码,可以在命令行上执行以下操作:

ruby -r rubygems script.rb

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

export RUBYOPT=rubygems

(来自http://www.rubygems.org/read/chapter/3Orion Edwards指出了环境变量的事情。

(如果“要求'rubygems'对您不起作用,则此建议的帮助有限:)

答案 1 :(得分:38)

您需要包含的文件没有标准。但是,您可以遵循一些常用的惯例,尝试并使用:

  • 通常文件被称为相同 命名为宝石。所以require mygem 将工作。
  • 通常文件是 lib中唯一的.rb文件 宝石的子目录,所以如果你 可以得到宝石的名字(也许吧 你正在通过 pre 2.1 rails中的vendor / gems 项目),然后你可以检查 {。1}}用于.rb文件,以及 如果只有一个,它很漂亮 好的赌注是需要的人

如果所有这些都有效,那么你所能做的就是查看gem的目录(你可以通过运行#{gemname}/lib找到它并查看lib目录,你可能需要阅读文件并希望在那里是解释如何做的评论

答案 2 :(得分:10)

要求必须映射到ruby路径中的文件。您可以通过运行'gem environment'找到宝石的安装位置(查找INSTALLATION DIRECTORY):

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将搜索模块的路径列表:

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>

答案 3 :(得分:8)

安装gem

后,人们还应该记得重新启动rails服务器

答案 4 :(得分:3)

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

答案 5 :(得分:2)

  

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

安装gem会将文件存入您的系统。它没有声称将调用这些文件 As laurie points out关于如何命名它们有几个约定,但没有什么可以强制执行的,很多宝石作者遗憾地不坚持它们。

  

另外,如果没有,最简单的方法是找到秘密咒语来要求该死的东西!?

阅读宝石的文档?
我发现rdoc gemname的Google搜索通常会找到the official rdocs for your gem,它通常会告诉您如何使用它。

Memcache可能不是最好的例子,因为他们假设你将从rails中使用它,并且已经为你做了'require',但是我见过的大多数其他例子都显示了正确的'需要'咒语

答案 6 :(得分:1)

我遇到的一个问题是,实际构建的gem不包括它应该拥有的所有文件。

files的问题是gemspec中存在语法错误,但在构建期间没有抛出任何错误。

如果其他人遇到同样的问题,请在此处添加此内容。

答案 7 :(得分:0)

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

我尝试了在这里和网上发布的大量解决方案,但最后我的解决方案是简单地按照http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html的说明重新安装LibXML& LibXSLT来自源代码,但确保我安装的LibXML版本与Nokogiri预期的版本相匹配。

一旦我这样做了,警告便消失了。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

require 'dir/subdir/file'

代表/lib/dir/subdir/file.rb

答案 10 :(得分:0)

也可能是宝石名称不匹配:

例如 dummy-spi-0.1.1/lib/spi.rb应命名为dummy-spi-0.1.1/lib/dummy-spi.rb

那么您可以

require 'dummy-spi'