Rubygems en gentoo... sólo con requ ire_gem?


#1

Hola Raileros,

Desde que instalé RoR en my sistema (Gentoo GNU/Linux), me intriga el
comportamiento de las rubygems. Al parecer, el método obsoleto
“require_gem” es la única forma de cargar gemas en mi sistema:

$ irb
irb(main):001:0> require ‘activerecord’
LoadError: no such file to load – activerecord
from
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in
require__' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:inrequire’
from (irb):1
irb(main):002:0> require_gem ‘activerecord’
=> true
irb(main):003:0>

He encontrado síntomas similares, pero que no se ajustan al mio:

http://www.mail-archive.com/removed_email_address@domain.invalid/msg01404.html

Cabe decir que gentoo puede ser un tanto especial gestionando las
rubygems:

http://gentoo-wiki.com/HOWTO_RoR (ver Rake Warnings)
http://rubyforge.org/pipermail/rubygems-developers/2006-September/002093.html

Aún así, no me explico el porque un método deprecated funcione y el
que se supone "oficial"o recomendado por todos lados falle :-/ Alguna
idea ?

Gracias,
brainstorm


#2

El Friday 26 January 2007 23:12:56 brainstorm escribió:

require__' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:inrequire’
from (irb):1
irb(main):002:0> require_gem ‘activerecord’
=> true
irb(main):003:0>

¿Y qué tal si haces “require ‘active_record’”? (fíjate en el guión
bajo).

Ya nos contarás.

Saludos.


#3

irb(main):001:0> require ‘active_record’
=> false
irb(main):002:0> require ‘netaddr’
MissingSourceFile: no such file to load – netaddr
from
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in
require__' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:inrequire’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/dependencies.rb:147:in
`require’
from (irb):2
irb(main):003:0> require_gem ‘netaddr’
=> true
irb(main):006:0> require ‘net_addr’
=> false

Interesante… parece que se soluciona usando la notación “_”
(teniendo en mente la version en CamelCase de la gem para saber dónde
separar, p.ej: ActiveRecord => active_record, NetAddr => net_addr,
etc…).

Alguien que conozca mejor las entrañas de rubygems puede indagar más
en el porque ?

Gracias !


#4

On Jan 27, 2007, at 3:48 PM, brainstorm wrote:

    from /usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/ 

separar, p.ej: ActiveRecord => active_record, NetAddr => net_addr,
etc…).

Aja, ocurre que el nombre de una gema no tiene por que coincidir con
el nombre de los .rb que proveen (que es lo que require busca). En
los dos ejemplos sucede eso.

Se podia usar netaddrd cargado de ese modo porque require_gem recibe
un nombre de gema, y las gemas pueden indicar que se haga un auto-
require de alguno de los ficheros que proveen:

Gem::Specification.new do |s|
s.name = %q{netaddr}
s.version = “1.1.0”
s.date = %q{2007-01-05}
s.summary = %q{A package for manipulating network addresses.}
s.email = %q{removed_email_address@domain.invalid}
s.autorequire = %q{net_addr}

end

de manera que se hacia un require ‘net_addr’.

– fxn