【发布时间】:2012-03-02 13:52:18
【问题描述】:
我已经在这个问题上追了几天,而且它比以往任何时候都更远。我正在运行 Rails 3.1、Ruby 1.9、Gem 1.8.15、Linux RHEL 4 环境。
简化的问题是 ruby 'require'(和 rails)无法找到我的应用程序需要的所有 gem。似乎 gem 需要找不到与 *.rb 不同的 gem 名称。例如,“require 'sass'”定位 sass.rb。但是“需要'therubyracer'”无法在库中找到v8.rb。没有名为“therubyracer.rb”的文件。相同的 使用“therubyrhino” - 没有“therubyrhino.rb”,但库中有一个“rhino.rb”。
即使这些 gem 在我的 Gemfile 中,Bundle install 也不会抛出错误。
这是一个例子:
首先,演示gem已安装:
>locate 'rhino.rb'
/usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
/usr/local/lib/ruby/gems/1.9.1/gems/gems/therubyrhino-1.73.1/lib/rhino.rb
即使安装了“therubyrhino”,并且在路径中,并且捆绑工作,“gem which”也找不到它。而这颗宝石在
与下面的“sass”相同的路径,它可以找到。这是错误:
gem which 'therubyrhino'
ERROR: Can't find ruby library file or shared library therubyrhino
请注意,gem 可以在 gem 中找到 rhino.rb 文件,因此该路径必须有效。
>gem which rhino
/usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
Require 不喜欢 rhino.rb:
ruby -rubygems -e 'require "rhino"'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `
require': no such file to load -- java (LoadError)
它无法按名称找到宝石。
ruby -rubygems -e 'require "therubyrhino"'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in ` require':
no such file to load -- therubyrhino (LoadError) from
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in ` require'
但正如我所提到的,在我的 Gemfile 中使用 'therubyrhino',Bundle install 可以工作。
这是我的 gem 路径,我正在手动设置它以进行测试:
>export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1:/usr/local/lib/ruby/gems/1.9.1/gems:/usr/local/lib/ruby/gems/1.9.1/gems/gem
>gem env
...
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.15
- RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [i686-linux]
- INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /usr/local/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /usr/local/lib/ruby/gems/1.9.1
- /usr/local/lib/ruby/gems/1.9.1/gems
- /usr/local/lib/ruby/gems/1.9.1/gems/gem
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
最后,这是一个生活美好而需要工作的案例。一切都很好,gem 名称的前缀 = lib 名称 (.../sass/lib/sass.rb)。首先我们可以看到安装了 sass gem:
>locate sass.rb
/usr/local/lib/ruby/gems/1.9.1/gems/sass-3.1.14/lib/sass.rb
/usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/vendor/sass/lib/sass.rb
/usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/lib/sass.rb
Gem 能找到吗?是的。
>gem which sass
/usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/lib/sass.rb
ruby 'require' 有效吗?是的。
>ruby -rubygems -e 'require "sass"'
(no error)
感谢您的帮助。
【问题讨论】:
标签: ruby-on-rails ruby rubygems gem