Comment est-ce que je vend des gemmes pour Rails3 / Bundler

Dans Rails 2.X, je pourrais simplement copier des gems dans vendor/gems/gem_name , ou utiliser la commande rake gems:unpack . Comme Rails3 utilise un bundler, il ne semble plus fonctionner. J’ai trouvé le bundle package commandes, mais cela ne fonctionne pas de la même manière.

Modifier:

Donc, juste pour élaborer un peu sur ceci:

La façon dont les rails 2 fonctionnaient, je pouvais facilement trouver des trucs dans les vendor/gems . S’ils sont regroupés dans des fichiers .gem , ce n’est pas possible. En outre, lors du développement d’un gem / plugin, il est très utile de le placer dans une application de rails pour le tester en contexte. Comment pourrais-je faire de telles choses avec bundler / rails3? Mon stream de travail est-il insortingnsèquement brisé d’une manière ou d’une autre?

En répondant à la deuxième partie de votre question, en développant un plugin / gem et en l’envoyant avec l’application rails sans rendre la gem disponible publiquement, vous pouvez le faire

Gemfile

 gem 'my_private_gem', :path => "vendor/gems/my_private_gem-VERSION" 

en supposant que vous avez effectué un gem unpack my_private_gem --target vendor/gems

note: le paquet de paquets décompresse toutes les gemmes (autant que dans Gemfile.lock). Je ne voudrais pas ceux qui sont en git.

L’équivalent Bundler est bundle package . Il regroupe tous les fichiers .gem spécifiés dans le Gemfile dans vendor/cache afin que les futures installations obtiennent les gems de ce cache plutôt que de http://rubygems.org/

L’équivalent bundle install --deployment correct est l’ bundle install --deployment . Cela installera les gemmes, dans leur état décompressé, dans le vendor/bundle .

C’est ce qui a fonctionné pour moi:

 gem unpack  [-v ] --target vendor/gems gem specification  [-v ] --ruby > vendor/gems/[-].gemspec 

Par exemple:

 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 

La première commande décompresse la gem dans le répertoire vendor / gems. Cependant, cela ne contient pas le gemspec. La deuxième commande crée le gemspec associé. Il est à noter qu’une autre affiche mentionnait quelque chose de similaire. Cette solution écrit correctement le gemspec au format ruby ​​au lieu de yaml.

Vous pouvez ensuite mettre à jour votre Gemfile pour qu’il pointe vers le joyau vendu:

 gem '', '', :path => "vendor/gems/-" 

Par exemple:

 gem 'sidekiq-pro', '2.1.4', :path => "vendor/gems/sidekiq-pro-2.1.4" 

Vous pouvez facilement vous retrouver avec quelque chose comme ça;

 gem list | awk '{print $1}' | xargs gem unpack --target vendor/gems 

Pensez à utiliser une infrastructure de développement “hébergée” fournie par la gem Host_gem_development .

Le développement de gemmes est souvent délicat car elles agissent comme des projets distincts en ce qui concerne les applications dans lesquelles vous les utilisez.

L’infrastructure de développement “hébergée” facilite le développement des gemmes en les intégrant (ce qui les rend “hébergées par”) dans votre application en direct. Ensuite, vous mettez à jour le code de votre gem comme vous mettez à jour le code de l’application régulière.

Aller à la page du projet