2010-09-20 22 views
5

Me pregunto cómo hacer que una gema sea accesible en una aplicación de Rails 3 sin ponerle una referencia en el archivo gem. Quiero hacer esto con ruby-debug (estoy usando ruby-debug19). Lo uso para depurar, pero no todos en mi equipo lo hacen y forzar la dependencia solo para que pueda usarlo no parece muy diplomático. ¿Hay otra manera?Cómo usar una gema en Rails 3 sin hacer referencia a ella en el Gemfile

si termina importando, estoy usando Rails3, Bündler 1.0.0, Ruby 1.9.2, RVM, OSX Snow Leopard

En una nota lateral, me había pensado en usar la característica de grupo Gemfile, pero esto tampoco se siente bien. Los grupos parecen ser geniales para cosas como factory_girl, donde existe una dependencia real aunque solo en entornos específicos, pero con Ruby-Debug no hay una necesidad real de que esté allí a menos que quieras usarlo.

+0

Estoy decidido a resolver esto por mí mismo, y lo compartiré si lo hago. IMO Bundler es lo peor que le ha pasado a Rails. – bioneuralnet

Respuesta

2

AFAIK no se puede porque Rails 3 aísla el sistema Gems.

Mi sugerencia es agregar la Gema en el Gemfile con la opción :require => false por lo que está incluida, instalada pero nunca cargada. Luego, en su aplicación, solicite la gema manualmente.

O puede intentar agruparlo en su proyecto, dentro de la carpeta del proveedor (debe haber una carpeta para Gems) e ignorar la carpeta de gemas específica en su SCM para que sus compañeros de trabajo no se vean afectados.

+0

Gracias por la sugerencia. Sin embargo, odiaría incluso requerir la instalación de la gema.La instalación de esta joya particular no siempre es sencilla y el comando 'bundle install' está sujeto a un error como resultado :(. –

3

Esto es muy feo y no tire de ella fuera de su Gemfile, pero hacer esto en mi Gemfile así que puedo utilizar 2 fuentes diferentes para una joya en diferentes entornos:

if ENV['MY_RDEBUG_VAR'] == "i_want_to_use_rdebug" 
    gem "ruby-debug" 
end 

Sólo hacerlo una variable de entorno oscuro que solo usted configuraría en su sistema. De esta forma, sus compañeros de trabajo no tendrán el conjunto env var y la gema nunca será instalada o cargada para ellos.

0

Terminé agregando el siguiente código a un inicializador de rieles e ignorándolo en el archivo .git/info/exclude.

$: << Bundler.bundle_path.join("gems", "ruby-debug19-0.11.6", "cli") 
$: << Bundler.bundle_path.join("gems", "ruby-debug-base19-0.11.24", "lib") 
$: << Bundler.bundle_path.join("gems", "linecache19-0.5.11", "lib") 
$: << Bundler.bundle_path.join("gems", "columnize-0.3.1", "lib") 
require 'ruby-debug' 

Aunque esto funciona, no sé si alguien en realidad debería hacer esto, aceptando el hecho de que estas dependencias deben ser colocados en el archivo joya es probablemente el mejor.

+0

Utilice esta solución bajo su propio riesgo. Creo que ha dejado de funcionar para mí en una posterior versión de RVM. Ahora-a-días agrego el ruby-debug al grupo de desarrollo en mi gemfile. –

0

Esta es mi propia solución a usar ruby_debug tanto con rubí 1,8 y 1,9

if RUBY_VERSION.include?('1.9') 
    ruby_debug = 'ruby-debug19' # new branch for ruby-debug that supports 1.9 
else 
    ruby_debug = 'ruby-debug' 
    gem 'fastercsv' # ruby 1.9 bundles FasterCSV now 
end 


group :test do 
    gem 'webrat' 
    gem "factory_girl" 
    gem 'shoulda' 

    # gem 'redgreen' 
    gem 'autotest-rails' 
    gem 'autotest-fsevent' 
    gem 'autotest' 
    gem ruby_debug 
end 

group :development do 
    gem ruby_debug 
end 
0

Sé que esto no cubre algunos otros casos en los que sería bueno si había una manera limpia de lograr esto - Me vienen a la mente autotest-growl y autotest-fsevent, así como muchas cosas que requiero/rescato en mi .irbrc para una experiencia más agradable que no quiero forzar a todos, como wirble y hirb, pero específicamente para ruby-debug, el ruby-debug-wrapper gem es útil si pruebas contra versiones múltiples de Ruby son parte de su dolor.

Si desea evitar la instalación de cualquier versión de , creo que las opciones que otros han sugerido son las únicas que existen actualmente.

Cuestiones relacionadas