Rails บันเดิลติดตั้งการผลิตเท่านั้น


87

ฉันยังใหม่กับราง / ทับทิม / มัดและสับสนเล็กน้อย

ในconfig/application.rbไฟล์ของเรามีส่วนบันเดิลเลอร์นี้:

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

และในของGemfileเราเราใช้กลุ่มต่างๆเช่น

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

แต่เมื่อฉันเรียกใช้RAILS_ENV=production bundle install(หรือbundle install --deployment) มันยังคงติดตั้งอัญมณีจากกลุ่มพัฒนา / ทดสอบ ...

เหตุใดจึงเกิดขึ้นหรือฉันจะทำให้สิ่งนี้ทำงานได้อย่างถูกต้องได้อย่างไร

คำตอบ:


182

ดู--withoutตัวเลือก:

bundle install --without development test

โดยค่าเริ่มต้น Bundler จะติดตั้งอัญมณีทั้งหมดและแอปพลิเคชันของคุณจะใช้อัญมณีที่ต้องการ Bundler เองไม่รู้อะไรเลยเกี่ยวกับ Rails และสภาพแวดล้อมปัจจุบัน


3
ฉันรู้เกี่ยวกับ--withoutแต่ดูเหมือนว่าจะสง่างามมากโดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงคำสั่งการกำหนดค่าเหล่านั้นในconfig/application.rb(ซึ่งควรจะกล่าวถึงตรงนี้) และพิจารณาคำพูดนี้ด้วย: Rails 3 มาพร้อมกับการอบด้วยการรองรับบันเดิล
Gingerlime

2
คำสั่ง Bundle install เป็นอิสระจาก Rails โดยสิ้นเชิง เพียงแค่มองเข้าไปใน Gemfile ของคุณโดยไม่สนใจว่าไลบรารีใดที่แอปพลิเคชันของคุณต้องการในการกำหนดค่าดังกล่าว ในความเป็นจริงคุณสามารถข้าม Bundler.require และต้องการ libs ด้วยตนเองจากกลุ่มใดก็ได้ ฉันยอมรับว่า Rails สามารถผสานรวมได้ดีกว่าในกรณีนี้กับ Bundler แต่ก็ไม่ได้
Simon Perepelitsa

2
ฉันเห็น. ดังนั้นฉันเดาว่ามันยุติธรรมที่จะบอกว่ารางรู้เกี่ยวกับบันเดิลเลอร์ (เช่นในconfig/application.rbและอื่น ๆconfig/boot.rb) แต่บันเดิลเลอร์ไม่รู้อะไรเกี่ยวกับราง ... มันอ่าน Gemfile เท่านั้นและไม่ได้ใช้ไฟล์รางใด ๆ ฉันคิดว่าสุดท้ายเหรียญก็ลดลง ขอบคุณสำหรับความช่วยเหลือของคุณ!
Gingerlime

อันที่จริงสิ่งนี้ดูสวยงามเนื่องจากไม่รวม 'กลุ่ม' ใน Gemfile ของคุณไม่ใช่สภาพแวดล้อมในแอป Rails ของคุณ ฉันรู้ว่ามีการพูดถึงเรื่องนี้ แต่เมื่อฉันคิดแบบนี้มันเข้าท่ากว่าสำหรับฉัน
jaydel

1
ไม่แน่ใจว่านี่คือสิ่งที่เปลี่ยนแปลงไปในช่วงสี่ปีที่ผ่านมาหรือไม่ แต่ข้อโต้แย้งที่--withoutควรจะแยกด้วย:s ไม่ใช่ช่องว่าง bundle install --without development:testดังนั้นผมเชื่อว่ามันควรจะเป็น
Joe Freeman

2

โซลูชันทางเลือกคือการใช้อัญมณีทับทิมbundle-only สามารถใช้งานได้ดังนี้:

> gem install bundle-only
> bundle-only production

ห้องสมุดนี้ไม่ก่อให้เกิดมลพิษ configs Bundler หรือขยายของคุณGemfile.lock; มันเป็นทางเลือกง่ายๆสำหรับbundle --without every other groupตัวเลือกในตัวที่bundlerมีให้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.