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:in
require’
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/[email protected]/msg01404.html
Cabe decir que gentoo puede ser un tanto especial gestionando las
rubygems:
The Gentoo Linux | CustomEssayMeister.com (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
El Friday 26 January 2007 23:12:56 brainstorm escribió:
require__' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in
require’
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.
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:in
require’
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 !
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{[email protected]}
s.autorequire = %q{net_addr}
…
end
de manera que se hacia un require ‘net_addr’.
– fxn