From: Martin Han on

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:
- ruby
- x86_64-linux
- 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:
- http://rubygems.org/
*** LOCAL GEMS ***

nokogiri (1.4.2)
Authors: Aaron Patterson, Mike Dalessio
Rubyforge: http://rubyforge.org/projects/nokogiri
Homepage: http://nokogiri.org
Installed at: /usr/lib/ruby/gems/1.8

Any help ?

Ben Bleything wrote:
> 2010/2/5 Jun Young <juneng603(a)gmail.com>:
>> 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(a)folio (master)
> ~ $ cat d.rb
> require 'nokogiri'
> puts "nokogiri loaded successfully"
>
> [11:24:34] ben(a)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(a)folio (master)
> ~ $ export RUBYOPT="rubygems"
>
> [11:24:42] ben(a)folio (master)
> ~ $ ruby d.rb
> nokogiri loaded successfully

--
Posted via http://www.ruby-forum.com/.