เมื่อเรียกใช้rake
ฉันได้รับข้อผิดพลาดนี้:
คุณได้เปิดใช้งานคราด 0.9.2 แล้ว แต่ Gemfile ของคุณต้องการคราด 0.8.7 พิจารณาใช้ Bundle exec
การใช้bundle exec rake
แทนที่จะrake
ดูเหมือนจะใช้งานได้ แต่เป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้หรือไม่?
เมื่อเรียกใช้rake
ฉันได้รับข้อผิดพลาดนี้:
คุณได้เปิดใช้งานคราด 0.9.2 แล้ว แต่ Gemfile ของคุณต้องการคราด 0.8.7 พิจารณาใช้ Bundle exec
การใช้bundle exec rake
แทนที่จะrake
ดูเหมือนจะใช้งานได้ แต่เป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้หรือไม่?
คำตอบ:
การใช้bundle exec
เป็นวิธีที่ถูกต้องในการทำเช่นนี้
โดยทั่วไปสิ่งที่เกิดขึ้นคือคุณได้อัปเดตคราดเป็น 0.9.2 ซึ่งตอนนี้ขัดแย้งกับเวอร์ชันที่ระบุใน Gemfile ของคุณ ก่อนหน้านี้รุ่นล่าสุดของrake
คุณได้จับคู่กับรุ่นใน Gemfile ของคุณเพื่อให้คุณไม่ได้รับการแจ้งเตือนใด ๆ rake
เมื่อเพียงแค่ใช้
Yehuda Katz (หนึ่งในผู้พัฒนา Bundler ดั้งเดิม) อธิบายทั้งหมดในบล็อกโพสต์นี้
เพื่อหลีกเลี่ยงการพิมพ์bundle exec ...
ตลอดเวลาคุณสามารถตั้งค่านามแฝงหรือฟังก์ชันในเชลล์ของคุณสำหรับคำสั่งที่คุณมักใช้กับ Bundler ตัวอย่างเช่นนี่คือสิ่งที่ฉันใช้สำหรับ Rake:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
หากคุณมีเหตุผลที่จะให้รุ่นปัจจุบันของคราด (หรืออะไรก็ตามอัญมณีอื่น ๆ ที่เป็นสาเหตุของปัญหา), แมตต์bundle exec
ถูกต้องวิธีที่ดีที่สุดที่จะทำนี้คือการวิ่ง สิ่งนี้ใช้เวอร์ชันที่ระบุใน Gemfile ของคุณแทนที่จะใช้อัญมณีเวอร์ชันใหม่ล่าสุดที่คุณติดตั้ง (nathan.f77 มีทางออกที่ดีด้านล่างหากคุณไม่ต้องการพิมพ์bundle exec
ทุกครั้งที่คุณเรียกใช้คราด)
มิฉะนั้นหากไม่มีเหตุผลที่จะไม่อัปเดตคราดคุณสามารถเรียกใช้
bundle update rake
สิ่งนี้จะอัปเดต Gemfile.lock ของคุณให้ใช้คราดเวอร์ชันใหม่ล่าสุดแทนที่จะต้องเรียกใช้bundle exec
ทุกครั้ง
หมายเหตุ:หากคุณเรียกใช้เพียงแค่bundle update
นี้จะเป็นการอัปเดตอัญมณีทั้งหมดใน Gemfile ของคุณแทนที่จะเป็นเพียงการคราดซึ่งอาจไม่ใช่สิ่งที่คุณต้องการเพราะหากมีบางอย่างแตกในแอปพลิเคชันของคุณคุณจะไม่รู้ว่าการอัปเดตอัญมณีใดทำให้เกิด
วิธีที่แนะนำน้อยกว่าในการเก็บเวอร์ชันเก่าไว้โดยไม่ต้องใช้bundle exec
คือการถอนการติดตั้งคราดเวอร์ชันที่ใหม่กว่า
$ gem ถอนการติดตั้งคราด เลือกอัญมณีที่จะถอนการติดตั้ง: 1. คราด -0.8.7 2. คราด -0.9.2 3. ทุกรุ่น > 2 ถอนการติดตั้ง rake-0.9.2 สำเร็จแล้ว
วิธีนี้ใช้งานได้ แต่ถ้าคุณกำลังทำงานกับหลายแอพที่ใช้คราดเวอร์ชันต่างกันอาจเป็นความเจ็บปวดเพราะคุณจะพบว่าตัวเองต้องติดตั้งและถอนการติดตั้งเวอร์ชันต่างๆอยู่ตลอดเวลา
gem install rake
ดังนั้นแรกที่ผมทำ จากนั้นgem uninstall rake
เลือก 0.9.2
bundle update
จะอัปเดตอัญมณีใด ๆ ที่ไม่มีเวอร์ชันที่ระบุเป็นเวอร์ชันล่าสุดที่มีให้ นั่นอาจไม่ใช่สิ่งที่คุณต้องการ bundle update rake
จะมีมากขึ้น
public_suffix
rake
การวิ่งbundle update public_suffix
ไม่มีผล แต่น่าเสียดาย
ลอง bundle clean --force
มันจะลบเจมระบบทั้งหมดที่ไม่ได้อยู่ในบันเดิลนี้
ครั้งล่าสุดที่สิ่งนี้เกิดขึ้นกับฉันฉันได้อัปเดตอัญมณีทั้งหมดของฉัน ฉันทำgem uninstall rake
รายการตัวเลือกเวอร์ชันแล้ว ฉันเลือกอันใหม่กว่าแล้วก็ไม่ต้องใช้bundle exec
อีกต่อไป
โดยพื้นฐานแล้วหากคุณใช้bundle exec
มันจะใช้เวอร์ชันอัญมณีใด ๆ ที่บันเดิลของคุณติดตั้งไว้ดังนั้นสิ่งที่อยู่ใน Gemfile โดยไม่bundle exec
ใช้เวอร์ชันใดก็ตามที่เป็นค่าเริ่มต้นระบบ
Ooh! บทความ Katz นั้นยอดเยี่ยมมาก!
ฉันชอบวิธีนี้มากที่สุด:
bundle install --binstubs
เพื่อให้คุณสามารถพิมพ์ได้
bin/rake .stuff.
สำหรับคนอย่างตัวฉันเองที่กำลังพัฒนาแอพทั้ง 2.3 และ 3.0.9 สิ่งนี้ทำให้ฉันรู้สึกดีขึ้นมาก
bundle exec
ถูกต้อง แต่คุณไม่ต้องการพิมพ์ทุกครั้ง
คุณสามารถใส่สิ่งนี้ใน. bashrc ของคุณ:
# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }
อีกวิธีหนึ่งในการไม่พิมพ์ทุกครั้งคือใช้ Makefile เช่น
rake :
bundle exec rake