ruby on rails - ver - ¿Cómo puedo vender gemas para Rails3/Bundler?
ver version de rails (6)
Considere usar la infraestructura de desarrollo "alojada" entregada por la gema hosted_gem_development .
Desarrollar gemas suele ser complicado porque actúan como proyectos separados con respecto a las aplicaciones en las que los utilizas.
La infraestructura de desarrollo "alojada" facilita el desarrollo de las gemas al incluirlas en (hacer que sean "hospedadas por") su aplicación en vivo. Luego actualiza el código de su gema como si actualizara un código de aplicación regular.
En Rails 2.X, simplemente podía copiar gemas en el vendor/gems/gem_name
, o usar el comando rake gems:unpack
. Como Rails3 usa bundler, parece que ya no funciona. Encontré el bundle package
comandos, pero no funciona de la misma manera.
Editar:
Entonces, solo para elaborar un poco sobre esto:
La forma en que funcionaban los rieles 2, podía grep fácilmente para encontrar cosas en el vendor/gems
. Si están agrupados en archivos .gem
, eso no es posible. Además, al desarrollar una joya / complemento, es muy útil colocarlo dentro de una aplicación de rieles para probarlo en contexto. ¿Cómo haría tales cosas con bundler / rails3? ¿Mi flujo de trabajo está inherentemente roto de alguna manera?
El equivalente de bundle install --deployment
correcto es bundle install --deployment
. Esto instalará las gemas, en su estado desempaquetado, en vendor/bundle
.
El equivalente de Bundler es bundle package
. Encapsula todos los archivos .gem especificados en el Gemfile en el vendor/cache
para que las futuras instalaciones obtengan las gemas de este caché en lugar de http://rubygems.org/
Esto es lo que funcionó para mí:
gem unpack <GEM_NAME> [-v <VERSION>] --target vendor/gems
gem specification <GEM_NAME> [-v <VERSION>] --ruby > vendor/gems/<GEM_NAME>[-<VERSION>].gemspec
Por ejemplo:
gem unpack sidekiq-pro -v 2.1.4 --target vendor/gems
gem specification sidekiq-pro -v 2.1.4 --ruby > vendor/gems/sidekiq-pro-2.1.4.gemspec
El primer comando descomprime la gema en el directorio de proveedores / gemas. Sin embargo, eso no contiene gemspec. El segundo comando crea el gemspec asociado. Es digno de mención que otro cartel mencionó algo similar. Esta solución escribe correctamente gemspec en formato ruby en lugar de yaml.
A continuación, puede actualizar su Gemfile para señalar a la gema guardada:
gem ''<GEM_NAME>'', ''<VERSION>'', :path => "vendor/gems/<GEM_NAME>-<VERSION>"
Por ejemplo:
gem ''sidekiq-pro'', ''2.1.4'', :path => "vendor/gems/sidekiq-pro-2.1.4"
Puedes terminar fácilmente con algo como esto;
gem list | awk ''{print $1}'' | xargs gem unpack --target vendor/gems
Respondiendo a la segunda parte de su pregunta, desarrollando un plugin / gema y enviándolo con la aplicación Rails sin hacer que la gema esté disponible públicamente, puede hacer esto
Gemfile
gem ''my_private_gem'', :path => "vendor/gems/my_private_gem-VERSION"
suponiendo que hayas realizado una gem unpack my_private_gem --target vendor/gems
nota: paquete paquete desempaqueta todas las gemas (tantas como en Gemfile.lock). No me gustaría que esos en git.