ruby - ruby 和 irb 使用不同的模块搜索路径吗?

标签 ruby rubygems

我有一个试图需要 restclient 模块的 Ruby 脚本。当我将它减少到只有这一行时,它仍然失败:

#!/usr/bin/env ruby

require 'restclient'

当我运行它时,出现以下错误:

./test.rb:3:in `require': no such file to load -- restclient (LoadError)
    from ./test2.rb:3

当我运行 irb 时,模块加载正常:

$ irb
>> require "restclient"
=> true
>>

据我所知,脚本和 irb 似乎都具有相同的模块路径:

$ ruby -e "puts $:"
/Library/Ruby/Site/1.8
/Library/Ruby/Site/1.8/powerpc-darwin10.0
/Library/Ruby/Site/1.8/universal-darwin10.0
/Library/Ruby/Site
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8/universal-darwin10.0
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/powerpc-darwin10.0
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin10.0
.

$ irb
>> puts $:
/Library/Ruby/Site/1.8
/Library/Ruby/Site/1.8/powerpc-darwin10.0
/Library/Ruby/Site/1.8/universal-darwin10.0
/Library/Ruby/Site
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8/universal-darwin10.0
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/powerpc-darwin10.0
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin10.0
.
=> nil
>>

什么会导致模块通过 irb 加载,而不是直接通过 Ruby 运行?

另一个令人困惑的细节是 restclient gem 似乎不在我的开始路径中。 irb 是如何找到它的?

$ locate restclient | grep gems
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/bin/restclient
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/abstract_response.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/exceptions.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/net_http_ext.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/payload.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/raw_response.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/request.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/resource.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/response.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient.rb
/Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/spec/restclient_spec.rb

谢谢 - 马克

最佳答案

尝试

require "rubygems"

在源代码文件中,或者用ruby -rubygems filename.rb启动ruby程序。

关于ruby - ruby 和 irb 使用不同的模块搜索路径吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760113/

相关文章:

ruby-on-rails - pdf-writer-1.1.8/lib/pdf/writer.rb :712: invalid multibyte char (US-ASCII)

rubygems - 无法安装 RubyGems 2.0.0,因为 'cannot load such file -- openssl (LoadError)'

arrays - 如何根据元素在数组中的索引位置分配属性?

ruby - 获取bundler来为特定平台安装gem

ruby - 如何从两个数组中独立删除一个元素,该元素已相互复制?

mysql - 将 Ruby on Rails 连接到现有 MySQL 数据库(之前安装了 XAMPP)

ruby-on-rails - 猴子修补 Rails gem 的安全和最佳方法

ruby-on-rails - 在Rails上处理 ruby 视频

javascript - 在 Rails 3 中使用 AJAX 删除记录

ruby - 是否可以从 Heroku 的私有(private) gitlab 主机安装 gem