versiones ver rails mac instalar gems all ruby-on-rails ruby-on-rails-3 bundler

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.

hosted_gem_development

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.