Ruby on rails 红宝石之路奇观
这几天来,我一直在追根究底地研究这个问题,而且它比以往任何时候都要遥远。我运行的是Rails 3.1、Ruby 1.9、Gem 1.8.15、Linux RHEL 4环境 简化的问题是ruby“require”(和rails)无法找到我的应用程序所需的所有宝石。而且似乎gems require找不到与*.rb不同的gem名称。例如,“require'sass'”定位sass.rb。但是“require'therubyracer'”无法在库中找到v8.rb。没有名为“therubyracer.rb”的文件。同样的 使用“therubyrhino”-库中没有“therubyrhino.rb”,但有一个“rhino.rb” 即使这些gem在我的Gemfile中,Bundle安装也不会抛出错误 以下是一个例子: 首先,为了演示安装了gem:Ruby on rails 红宝石之路奇观,ruby-on-rails,ruby,rubygems,gem,Ruby On Rails,Ruby,Rubygems,Gem,这几天来,我一直在追根究底地研究这个问题,而且它比以往任何时候都要遥远。我运行的是Rails 3.1、Ruby 1.9、Gem 1.8.15、Linux RHEL 4环境 简化的问题是ruby“require”(和rails)无法找到我的应用程序所需的所有宝石。而且似乎gems require找不到与*.rb不同的gem名称。例如,“require'sass'”定位sass.rb。但是“require'therubyracer'”无法在库中找到v8.rb。没有名为“therubyracer.rb
>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”,并且在路径中,bundle工作了,“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'
但正如我所提到的,在我的GEM文件中使用“therubyrhino”时,Bundle安装可以正常工作
这是我的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 name的前缀=lib name(…/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 which sass
/usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/lib/sass.rb
ruby需要工作吗?对
>ruby -rubygems -e 'require "sass"'
(no error)
谢谢你的帮助 您必须使用
gem
命令加载gem,然后才能要求它。例如:
$ irb
1.9.3p0 :001 > gem 'therubyracer'
=> true
1.9.3p0 :002 > require 'v8'
=> true
如果您的GEM文件中有therubyracer
,那么您只需在应用程序中执行要求“v8”
。或者,您可以在GEM文件中指定该库:
gem "therubyracer", :require => 'v8'
如果您使用的是Bundler.require
,则上行将自动调用require'v8'
请注意,therubyrhino
仅用于jruby
;您不能将它与C Ruby(MRI)一起使用