我真正问的问题是为什么要求不采用宝石的名称。而且,如果没有,那么最简单的方法就是找到秘密咒语来要求该死的东西!?
作为一个例子,如果我安装了memcache-client
,那么我必须使用
require 'rubygems'
require 'memcache'
答案 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/3。Orion Edwards指出了环境变量的事情。
(如果“要求'rubygems'对您不起作用,则此建议的帮助有限:)
答案 1 :(得分:38)
您需要包含的文件没有标准。但是,您可以遵循一些常用的惯例,尝试并使用:
require mygem
将工作。 如果所有这些都有效,那么你所能做的就是查看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'