Rails bundle install produção apenas

87

Eu ainda sou novo em rails / ruby ​​/ bundler e estou um pouco confuso.

Em nosso config/application.rbarquivo, há este segmento de bundler:

if defined?(Bundler)         
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

e no nosso Gemfileusamos grupos diferentes, por exemplo

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end

Mas quando eu executo RAILS_ENV=production bundle install(ou bundle install --deployment), ele ainda instala joias do grupo de desenvolvimento / teste ...

Por que isso acontece ou como posso fazer isso funcionar corretamente?

gengibre
fonte

Respostas:

182

Dê uma olhada na --withoutopção:

bundle install --without development test

Por padrão, o Bundler instala todas as gemas e seu aplicativo usa as gemas de que precisa. O próprio Bundler não sabe nada sobre Rails e o ambiente atual.

Simon Perepelitsa
fonte
3
Eu sei --without, mas parece muito elegante, particularmente considerando aquelas diretivas de configuração em config/application.rb(que supostamente tratam exatamente disso) e também considerando esta citação: Rails 3 vem com suporte para bundler.
gengibre
2
O comando de instalação do pacote é totalmente independente do Rails. Ele apenas olha em seu Gemfile, não se importa com quais bibliotecas seu aplicativo realmente requer na configuração mencionada. Na verdade, você pode pular Bundler.require e exigir libs manualmente de qualquer grupo. Eu concordo, que Rails poderia se integrar melhor neste caso com Bundler, mas não faz.
Simon Perepelitsa
2
Entendo. Então eu acho que é justo dizer que rails sabe sobre bundler (ou seja, in config/application.rbe também config/boot.rb), mas bundler não sabe nada sobre rails ... Ele apenas lê o Gemfile e não usa nenhum desses arquivos rails. Acho que a moeda finalmente caiu. Obrigado pela ajuda!
gengibre
na verdade, isso parece elegante, pois está excluindo 'grupos' em seu Gemfile, não ambientes em seu aplicativo Rails. Eu sei que isso foi dito, mas quando pensei sobre isso dessa forma, fez mais sentido para mim.
Jaydel
1
Não tenho certeza se isso é algo que mudou nos últimos quatro anos, mas os argumentos para --withoutdevem ser separados por :s, não por espaços. Então eu acredito que deveria ser bundle install --without development:test.
Joe Freeman
2

Uma solução alternativa é usar a bundle-onlygema do rubi . Ele pode ser usado da seguinte maneira:

> gem install bundle-only
> bundle-only production

Esta biblioteca não polui suas configurações de bundler ou aumenta Gemfile.lock; é uma alternativa simples para a bundle --without every other groupopção integrada que bundlerfornece.

Tom Lord
fonte