2012-02-10 128 views
4

我一直在追逐我的尾巴在这个问题上几天,现在比以往任何时候都更远。我运行的是Rails 3.1,Ruby 1.9,Gem 1.8.15,Linux RHEL 4环境。红宝石宝石路径奇怪

简化的问题是,ruby'require'(和rails)找不到我应用程序需要的所有宝石。而且似乎宝石需求找不到与* .rb不同的宝石名称。例如,“require'sass'”找到sass.rb.但是“require'therubyracer'”找不到lib中的v8.rb。没有名为“therubyracer.rb”的文件。与'therubyrhino'相同的 - 没有'therubyrhino.rb',但是lib中有'rhino.rb'。

即使这些gem位于我的Gemfile中,Bundle安装也不会抛出错误。

下面是一个例子:

首先,以展示宝石安装:

>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”被安装,并在道路,捆绑合作,“创业板这”找不到。这个宝石在下面,它可以找到相同的路径作为'sass'的

。以下是错误:

gem which 'therubyrhino' 
    ERROR: Can't find ruby library file or shared library therubyrhino 

注意,宝石可以找到宝石里面的rhino.rb文件,因此该路径必须正常工作。

>gem which rhino 
    /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb 

要求并不像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安装工程。

这里是我的宝石路径,其中我手动设置为测试:

>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/ 

最后,这里是一个情况下生活是美好的,需要的作品。一切都很好,宝石名称= LIB名(... /上海社会科学院/ lib中/ sass.rb)的前缀。首先,我们可以看到,青菜宝石安装:

>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 which sass 
    /usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/lib/sass.rb 

并确实需要红宝石的工作吗?是。

>ruby -rubygems -e 'require "sass"' 
    (no error) 

感谢您的帮助。

回答

2

你必须能够require之前与gem命令加载的宝石。例如:

$ irb 
1.9.3p0 :001 > gem 'therubyracer' 
=> true 
1.9.3p0 :002 > require 'v8' 
=> true 
2

如果你有therubyracerGemfile,那么所有你需要在你的应用程序做的是require 'v8'。或者您可以指定的lib它在你Gemfile

gem "therubyracer", :require => 'v8' 

如果使用Bundler.require,上面的线会自动调用require 'v8'

请注意,therubyrhino仅适用于jruby;你不能在C Ruby(MRI)中使用它。