Rails bundel menginstal produksi saja

87

Saya masih baru mengenal rails / ruby ​​/ bundler dan saya sedikit bingung.

Di config/application.rbfile kami ada segmen bundler ini:

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

dan di dalam kami, Gemfilekami menggunakan grup yang berbeda, misalnya

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

Tetapi ketika saya menjalankan RAILS_ENV=production bundle install(atau bundle install --deployment), itu masih menginstal permata dari pengembangan / grup pengujian ...

Mengapa ini terjadi atau bagaimana saya dapat membuatnya berfungsi dengan baik?

jahe
sumber

Jawaban:

182

Lihat --withoutopsi:

bundle install --without development test

Secara default, Bundler menginstal semua permata dan aplikasi Anda menggunakan permata yang dibutuhkannya. Bundler sendiri tidak tahu apa-apa tentang Rails dan lingkungannya saat ini.

Simon Perepelitsa
sumber
3
Saya tahu tentang --without, tetapi tampaknya sangat elegan, terutama mengingat arahan konfigurasi di config/application.rb(yang seharusnya membahas hal ini dengan tepat) dan juga mempertimbangkan kutipan ini: Rails 3 hadir dengan dukungan bundler.
kapur jahe
2
Perintah pemasangan bundel benar-benar independen dari Rails. Itu hanya melihat ke dalam Gemfile Anda, tidak peduli perpustakaan apa yang sebenarnya dibutuhkan aplikasi Anda dalam konfigurasi yang disebutkan. Nyatanya, Anda dapat melewati Bundler.require dan memerlukan libs secara manual dari grup mana pun. Saya setuju, bahwa Rails dapat berintegrasi lebih baik dalam hal ini dengan Bundler, tetapi tidak.
Simon Perepelitsa
2
Saya melihat. Jadi saya rasa adil untuk mengatakan bahwa rails tahu tentang bundler (yaitu dalam config/application.rbdan juga config/boot.rb), tetapi bundler tidak tahu apa-apa tentang rails ... Ia hanya membaca Gemfile dan tidak menggunakan file rails tersebut. Saya pikir koin itu akhirnya jatuh. Terima kasih atas bantuan Anda!
gingerlime
sebenarnya ini tampak elegan karena tidak termasuk 'grup' di Gemfile Anda, bukan lingkungan di aplikasi Rails Anda. Saya tahu ini telah dikatakan tetapi ketika saya memikirkannya seperti ini, itu lebih masuk akal bagi saya.
jaydel
1
Tidak yakin apakah ini adalah sesuatu yang berubah dalam empat tahun terakhir, tetapi argumen ke --withoutseharusnya dipisahkan dengan :s, bukan spasi. Jadi saya yakin seharusnya begitu bundle install --without development:test.
Joe Freeman
2

Solusi alternatifnya adalah dengan menggunakan bundle-onlypermata ruby . Ini dapat digunakan sebagai berikut:

> gem install bundle-only
> bundle-only production

Library ini tidak mencemari konfigurasi bundler atau augment Anda Gemfile.lock; itu adalah alternatif sederhana untuk bundle --without every other groupopsi bawaan yang bundlermenyediakan.

Tom Lord
sumber