# Weird action of 'nokogiri' library on Snow Leopard

**URL:** <https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997>\
**Category:** Ruby\
**Created:** [February 5, 2010, 7:35pm UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997 "2010-02-05T19:35:44Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![junyoung](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19adc/32.png) [@junyoung](https://www.ruby-forum.com/u/junyoung)\
**Post date:** [February 5, 2010, 7:35pm UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997/1 "2010-02-05T19:35:44Z")

</div>

cut the introduction… here is my situation on the snow leopard.

$ cat d.rb  
require ‘nokogiri’

$ ruby d.rb  
d.rb:1:in `require’: no such file to load – nokogiri (LoadError)  
from d.rb:1

$ irb

> > require ‘nokogiri’  
> > =\> true
> 
> > quit

I can just execute and load ‘nokogiri’ library only on irb not A  
source.

what’s problems on my situation?

any helps?

---

<div class="post-metadata">

**Author:** ![junyoung](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19adc/32.png) [@junyoung](https://www.ruby-forum.com/u/junyoung)\
**Post date:** [February 5, 2010, 7:49pm UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997/2 "2010-02-05T19:49:12Z")

</div>

On Fri, Feb 5, 2010 at 10:35 AM, junyoung [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I can just execute and load ‘nokogiri’ library only on irb not A  
> source.
> 
> what’s problems on my situation?

Most likely because you do not require rubygems in your script. Snow  
Leopard’s default irbrc (in /etc/irbrc) takes care of that for you.

Add a “require ‘rubygems’” above your “require ‘nokogiri’” and you  
should be fine.,

Ben

---

<div class="post-metadata">

**Author:** ![junyoung](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19adc/32.png) [@junyoung](https://www.ruby-forum.com/u/junyoung)\
**Post date:** [February 5, 2010, 8:19pm UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997/3 "2010-02-05T20:19:03Z")

</div>

On 2¿ù6ÀÏ, ¿ÀÀü3½Ã43ºÐ, Ben B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Add a “require ‘rubygems’” above your “require ‘nokogiri’” and you  
> should be fine.,
> 
> Ben

Okay ben, thanks for your replay.

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’??

---

<div class="post-metadata">

**Author:** ![junyoung](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19adc/32.png) [@junyoung](https://www.ruby-forum.com/u/junyoung)\
**Post date:** [February 5, 2010, 8:26pm UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997/4 "2010-02-05T20:26:40Z")

</div>

2010/2/5 Jun Y. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> 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

---

<div class="post-metadata">

**Author:** ![junyoung](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19adc/32.png) [@junyoung](https://www.ruby-forum.com/u/junyoung)\
**Post date:** [February 5, 2010, 9:14pm UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997/5 "2010-02-05T21:14:05Z")

</div>

On 2¿ù6ÀÏ, ¿ÀÀü4½Ã25ºÐ, Ben B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> RubyGems is a packaging system. It works by manipulating Ruby’s load  
> require ‘nokogiri’  
> [11:24:42] ben@folio (master)  
> ~ $ ruby d.rb  
> nokogiri loaded successfully

you make me clear, ben.  
thanks 🙂

---

<div class="post-metadata">

**Author:** ![junyoung](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19adc/32.png) [@junyoung](https://www.ruby-forum.com/u/junyoung)\
**Post date:** [February 5, 2010, 8:54pm UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997/6 "2010-02-05T20:54:46Z")

</div>

On Fri, Feb 5, 2010 at 10:35 AM, junyoung [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> $ cat d.rb

require ‘rubygems’ # missing this 🙂

---

<div class="post-metadata">

**Author:** ![junyoung](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19adc/32.png) [@junyoung](https://www.ruby-forum.com/u/junyoung)\
**Post date:** [June 10, 2010, 2:37am UTC](https://www.ruby-forum.com/t/weird-action-of-nokogiri-library-on-snow-leopard/182997/7 "2010-06-10T02:37:53Z")

</div>

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](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](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/](http://rubygems.org/)  
\*\*\* LOCAL GEMS \*\*\*

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

Any help ?

Ben B. wrote:

> 2010/2/5 Jun Y. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > 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
