ruby-on-rails - que - ruby on rails ejemplos
Bifurcar una gema para un proyecto de Rails (2)
Me he encontrado dos veces en esta situación: instalo una gema en mi sistema y empiezo a utilizarla en mi proyecto de Rails. Eventualmente necesito hacer algunos cambios a esa gema. ¿Cómo debo proceder?
Idealmente me gustaría ver el código fuente de esa gema en alguna parte, como ~ / third_party / gems, trabajar en ello y hacer que mi proyecto Rails lo use en su lugar. ¿Es eso posible?
En todos los casos, las gemas estaban en github, así que probablemente lo haría en github, lo cloné, tendría posibilidades y mantendría mi propia rama. Supongo que entonces instalaría esa rama directamente con gem install en mi servidor. ¿Tiene sentido?
En todos los casos, las gemas estaban en github, así que probablemente lo haría en github, lo cloné, tendría posibilidades y mantendría mi propia rama. Supongo que entonces instalaría esa rama directamente con gem install en mi servidor.
Si realmente necesita hackear la fuente real de la gema, entonces sí, esa sería la manera de hacerlo. Sin embargo, debería ser un último recurso. No desea mantener la gema real si no es necesario. ¿Por qué no extender las clases desde la fuente de gemas cuya funcionalidad necesita cambiar y utilizar sus clases en lugar de las clases de gemas en su código de Rails?
Encuentro raro que realmente necesite piratear código de terceros directamente para hacer lo que necesita hacer. Un buen software puede ampliarse / aumentarse fácilmente.
Hoy esto es bastante fácil de hacer con Bundler. Usted hace una copia local de la gema y luego en vez de hacer
gem "whatever"
en tu Gemfile, haces:
gem "whatever", :path => "/home/pupeno/whatever"
Después de ejecutar la instalación del paquete, la gema se selecciona de ese directorio. Incluso si modifica algo allí, todo lo que necesita hacer para volver a cargarlo es reiniciar Rails.
Si necesita implementar una aplicación usando sus propios cambios de una Gema, haga una bifurcación, en Github o similar y en el Gemfile lo hace:
gem "whatever", :git => "[email protected]:/pupeno/whatever.git"
y eso es. Es simple, directo y hermoso.