2012-06-06 13 views
64

Przepraszam, jeśli jest to pytanie typu RTFM, ale wciąż jestem nowy w stosunku do rails/ruby ​​/ bundler i jestem trochę zdezorientowany.Pakiet szyn tylko instaluje produkcję

W naszym pliku config/application.rb tam ten segment 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 

iw naszych Gemfile używamy różnych grup, na przykład

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 

Ale kiedy biegnę RAILS_ENV=production bundle install (lub bundle install --deployment), to nadal instaluje perełki z grupy rozwój/test ...

Dlaczego tak się dzieje i jak mogę to działa prawidłowo?

Odpowiedz

140

Spójrz na --without opcji:

bundle install --without development test

Domyślnie Bundler instaluje wszystkie kamienie i aplikacja korzysta z klejnotów, które potrzebuje. Bundler sam nie wie nic o Railsach i aktualnym środowisku.

+2

Wiem o "- bez", ale wydaje się bardzo elegancki, szczególnie biorąc pod uwagę te dyrektywy konfiguracyjne w 'config/application.rb' (które mają adresować dokładnie to), a także biorąc pod uwagę ten cytat: [Railsy 3 pochodzi z zapiekaną podpórką.] (Http://gembundler.com/rails3.html) – gingerlime

+2

Polecenie instalacji pakietu jest całkowicie niezależne od Rails. Po prostu zagląda do twojego Gemfile'a, nie obchodzi go, jakie biblioteki faktycznie wymaga twoja aplikacja we wspomnianej konfiguracji. W rzeczywistości można pominąć Bundler.require i wymagać bibliotek ręcznie z dowolnej grupy. Zgadzam się, że Rails mógłby lepiej zintegrować się w tym przypadku z Bundlerem, ale tak nie jest. –

+2

Rozumiem. Sądzę więc, że można powiedzieć, że szyny wiedzą o bundlerach (np. W 'config/application.rb' oraz również' config/boot.rb'), ale bundler nie wie nic o szynach ... Czyta tylko Gemfile i nie używa żadnego z tych plików szyn. Myślę, że moneta w końcu spadła. Dzięki za pomoc! – gingerlime

0

Alternatywnym rozwiązaniem jest użycie bundle-only ruby gem. Może być stosowany w sposób następujący:

> gem install bundle-only 
> bundle-only production 

Ta biblioteka nie zanieczyszcza swoje configs Bundler lub zwiększenia Gemfile.lock; jest to prosta alternatywa dla wbudowanej opcji , którą zapewnia bundler.

Powiązane problemy