ti-enxame.com

Como faço para vender gemas para o Rails3 / Bundler

Em Rails 2.X, eu poderia simplesmente copiar gemas em vendor/gems/gem_name, ou use o comando rake rake gems:unpack. Como o Rails3 usa o empacotador, ele não parece mais funcionar. Eu encontrei o comando bundle package, mas não funciona da mesma maneira.

Editar:

Então, apenas para elaborar um pouco sobre isso:

Da maneira que Rails 2 funcionou, eu poderia facilmente grep encontrar coisas em vendor/gems. Se eles estiverem agrupados em .gem arquivos, isso não é possível. Além disso, ao desenvolver um gem/plugin, é muito útil colocá-lo em um aplicativo Rails para testá-lo no contexto. Como eu faria essas coisas com o bundler/Rails3? inerentemente quebrado de alguma forma?

47
troelskn

Respondendo à segunda parte da sua pergunta, desenvolvendo um plugin/gem e enviando-o com o aplicativo Rails sem disponibilizar a gem publicamente, você pode fazer isso

Gemfile

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

assumindo que você executou um gem unpack my_private_gem --target vendor/gems

note: pacote configurável descompacta todas as gemas (tantas quanto no Gemfile.lock). Eu não gostaria que aqueles no git.

107
oma

O equivalente do Bundler é bundle package. Ele empacota todos os arquivos .gem especificados no Gemfile em vendor/cache para que instalações futuras obtenham as gemas desse cache, e não de http://rubygems.org/

27
John Topley

O equivalente correto do Bundler é bundle install --deployment. Isso instalará as gemas, em seu estado descompactado, em vendor/bundle.

22
Matijs van Zuijlen

Isto é o que funcionou para mim:

gem unpack <GEM_NAME> [-v <VERSION>] --target vendor/gems
gem specification <GEM_NAME> [-v <VERSION>] --Ruby > vendor/gems/<GEM_NAME>[-<VERSION>].gemspec

Por exemplo:

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

O primeiro comando descompacta a gema no diretório vendor/gems. No entanto, isso não contém o gemspec. O segundo comando cria o gemspec associado. Vale ressaltar que outro pôster mencionou algo semelhante. Esta solução grava corretamente o gemspec no formato Ruby em vez de no yaml.

Você pode atualizar seu Gemfile para apontar para a gema vendida:

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

Por exemplo:

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

Considere o uso da infraestrutura de desenvolvimento "hospedada" fornecida pela Gem_development_hosted gem.

O desenvolvimento de gemas geralmente é complicado porque eles agem como projetos separados em relação aos aplicativos em que você os usa.

A infraestrutura de desenvolvimento "hospedado" facilita o desenvolvimento de gemas, incluindo-as (tornando-as "hospedadas por") em seu aplicativo ao vivo. Em seguida, você atualiza o código da sua gema como atualiza o código de aplicativo regular.

Ir para a página do projeto

0
Alex Fortuna