May i seek your help for captioned case ?
I am test the script named test.rb by command “ruby test.rb” and it
pass.
Then i converte it as rake task.
The rake task pass on rails 2.3.5 but fail on rails 3 beta4 with error
msg:
“no such file to load – nokogiri”
============================
env :rails 3 beta4, ruby 1.8.7, ubuntu
test.rb
require ‘rubygems’
require ‘nokogiri’
require ‘open-uri’
require “iconv”
url = “http://www.bugutang.com”
doc = Nokogiri::HTML(open(url))
doc.css(“title”).each do |c|
puts Iconv.iconv(“GBK//IGNORE”, “UTF-8//IGNORE”, c.content)
end
============================
claw.rake
desc "Fetch product "
task :claw => :environment do
require ‘rubygems’
require ‘nokogiri’
require ‘open-uri’
require “iconv”
url = “http://www.bugutang.com”
doc = Nokogiri::HTML(open(url))
doc.css(“title”).each do |c|
puts Iconv.iconv(“GBK//IGNORE”, “UTF-8//IGNORE”, c.content)
end
end
here is the environment :
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.7
- RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /usr/bin
- RUBYGEMS PLATFORMS:
- GEM PATHS:
- /usr/lib/ruby/gems/1.8
- /home/bugu/.gem/ruby/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
nokogiri (1.4.2)
Authors: Aaron P., Mike D.
Rubyforge: http://rubyforge.org/projects/nokogiri
Homepage: http://nokogiri.org
Installed at: /usr/lib/ruby/gems/1.8
Any help ?
Ben B. wrote:
2010/2/5 Jun Y. [email protected]:
it makes my script working. but, I am still wondering why it didn’t
work.
I installed the library by using gems. why I have to load ‘rubygems’
library also before calling ‘nokogiri’??
Because that is how it works 
RubyGems is a packaging system. It works by manipulating Ruby’s load
path to include the lib directories of any gems you have installed…
but to make that work, you must include RubyGems in your script.
Starting with Ruby 1.9, RubyGems is built-in to Ruby, so you won’t
need to do that any more, but while you’re using Ruby 1.8, you’ll need
to require rubygems whenever you want to use a gem.
As an alternative, you can set the environment variable RUBYOPT to
‘rubygems’:
[11:24:29] ben@folio (master)
~ $ cat d.rb
require ‘nokogiri’
puts “nokogiri loaded successfully”
[11:24:34] ben@folio (master)
~ $ ruby d.rb
d.rb:1:in `require’: no such file to load – nokogiri (LoadError)
from d.rb:1
[11:24:36] ben@folio (master)
~ $ export RUBYOPT=“rubygems”
[11:24:42] ben@folio (master)
~ $ ruby d.rb
nokogiri loaded successfully