รางมัดสะอาด


88

หลังจากอัปเดตชุดรวมคุณจะมีอัญมณีบางอย่างที่อาจล้าสมัย - เนื่องจากมีการติดตั้งอัญมณีรุ่นใหม่กว่า ไม่มีคำสั่งดังกล่าวภายใต้คือปฏิบัติการคือbundle bundle cleanเราจะกำจัดอัญมณีที่ล้าสมัยเหล่านี้ได้อย่างไร?

นี่เป็นความพยายามที่จะลดขนาดกระสุนในแอปรางของฉัน

คำตอบ:


133

หากคุณใช้ Bundler 1.1 หรือใหม่กว่าคุณสามารถใช้ได้bundle cleanตามที่คุณคิดไว้ สิ่งนี้ซ้ำซ้อนหากคุณใช้bundle install --path(Bundler จัดการตำแหน่งที่คุณระบุด้วย --path ดังนั้นต้องรับผิดชอบในการลบอัญมณีที่ล้าสมัย) แต่ถ้าคุณใช้ Bundler เพื่อติดตั้งอัญมณีเป็นอัญมณีระบบbundle clean --forceจะลบอัญมณีระบบใด ๆ ต้องการโดย Gemfile ของคุณ ข้อแม้ที่ชัดเจนอย่างเห็นได้ชัด: อย่าทำเช่นนี้หากคุณมีแอพอื่นที่ต้องพึ่งพาอัญมณีระบบที่ไม่ได้อยู่ใน Gemfile ของคุณ!

แพ็ต Shaughnessy มีคำอธิบายที่ดีbundle cleanและเพิ่มเติมใหม่อื่น ๆ ใน Bundler 1.1


30
สำหรับผู้ที่ใช้ rvm โปรดทราบว่าbundle clean --forceอย่าแตะต้องอัญมณีระดับโลกของคุณ แต่เป็นอัญมณีที่อยู่ในอัญมณีปัจจุบัน ดังนั้นbundle clean --forceจะให้ผลลัพธ์เดียวกันและจะได้เร็วขึ้นแล้วตามด้วยrvm gemset empty bundle install
Gabe Kopley

19
การปฏิเสธความรับผิด: "Bundle clean --force" สามารถระเบิดอัญมณีจำนวนมากได้หากคุณไม่ระวัง นั่นควรจะเป็นบรรทัดแรกของการตอบกลับนี้ ... โดยเฉพาะอย่างยิ่งเมื่อมีการโหวตมากมาย ระวัง!
jerrylroberts

36

หากคุณใช้ RVM คุณสามารถใช้rvm gemset emptyสำหรับอัญมณีปัจจุบัน - คำสั่งนี้จะลบอัญมณีทั้งหมดที่ติดตั้งลงในอัญมณีปัจจุบัน (อัญมณีจะยังคงอยู่) จากนั้นเรียกใช้bundle installเพื่อติดตั้งอัญมณีเวอร์ชันจริง ตรวจสอบให้แน่ใจว่าคุณไม่ได้ลบอัญมณีทั่วไปเช่นคราดบันเลอร์และอื่น ๆ ในระหว่างนั้นrvm gemset empty(หากเป็นกรณีนี้ให้ติดตั้งด้วยตนเองgem installก่อนหน้านี้bundle install)


22

หากคุณกำลังใช้ RVM คุณสามารถติดตั้งอัญมณีของคุณลงในgemsets ด้วยวิธีนี้เมื่อคุณต้องการล้างข้อมูลทั้งหมดคุณสามารถลบอัญมณีออกได้ซึ่งจะเป็นการลบอัญมณีทั้งหมดที่ติดตั้งไว้ในนั้น ตัวเลือกอื่นของคุณคือเพียงแค่ถอนการติดตั้งอัญมณีที่ไม่ได้ใช้และเรียกใช้bundle installคำสั่งของคุณใหม่

เนื่องจากบันเดิลเลอร์หมายถึงเป็นเครื่องมือกำหนดเวอร์ชันเจมโปรเจ็กต์ต่อโปรเจ็กต์จึงไม่มีbundle cleanคำสั่ง การทำเช่นนี้จะหมายถึงความเป็นไปได้ในการลบอัญมณีที่เกี่ยวข้องกับโครงการอื่น ๆ ด้วยซึ่งไม่เป็นที่ต้องการ นั่นหมายความว่าบันเดิลเลอร์อาจเป็นเครื่องมือที่ไม่ถูกต้องในการใช้จัดการไดเร็กทอรีอัญมณีของคุณ คำแนะนำส่วนตัวของฉันคือการใช้อัญมณี RVM เพื่อแซนด์บ็อกซ์อัญมณีของคุณในบางโครงการหรือเวอร์ชันทับทิม


41
ไม่จำเป็นต้องลบอัญมณีออกคุณสามารถพิมพ์ 'rvm gemset empty gemset_name' แล้วเรียกใช้ 'bundle install' อีกครั้ง
JAG

คำอธิบายที่ยอดเยี่ยม การรู้เกี่ยวกับบันเดิลเลอร์ช่วยได้ ขอบคุณ.
Volte

9
มัดสะอาด - บังคับจะทำงาน
กะลาสี

ด้วย rvm ให้ล้างโฟลเดอร์. rvm / gems / ruby-xxxxxx / Specifications หาก "Bundle install" ปฏิเสธที่จะดาวน์โหลดอัญมณีอีกครั้ง
barbacan

@JAG ฉันจะเพิ่มว่าคุณต้อง'gem install bundler'หลังจากทำความสะอาด gemset เพื่อให้สามารถเรียกบันเดิลติดตั้งได้
maleta

13

สุจริตผมมีปัญหากับการอ้างอิงแบบวงกลม Bundler rm -rf .bundleและวิธีที่ดีที่สุดที่จะไปมี ช่วยตัวเองไม่ให้ปวดหัวและใช้ค้อน


1
ฉันต้องทำสิ่งนี้เพื่อหยุดการรบกวนฉันเกี่ยวกับ "คุณต้องเรียกการติดตั้งบันเดิลด้วย --no-deployment" ขอบคุณ
Kevin

2
ขอบคุณสำหรับความคิด แม้ว่าสำหรับฉันการใช้ค้อนที่ใหญ่กว่าช่วย rvm implode --forceแล้วติดตั้ง rvm ใหม่
Ryan

1

ฉันถือว่าคุณติดตั้งอัญมณีเข้าไปvendor/bundle? ถ้าเป็นเช่นนั้นทำไมไม่เพียงลบอัญมณีทั้งหมดและทำความสะอาดbundle install?


ไดเร็กทอรีผู้ขายของฉันติดตามเฉพาะสินทรัพย์และปลั๊กอินที่ติดตั้ง ฉันอยู่บน Rails 3.1
iGbanam

แล้วอะไรคือเหตุผลในการลบอัญมณีที่ไม่ได้ใช้หากไม่ได้คัดลอกไปใช้งาน? พวกเขาไม่ได้ใช้พื้นที่มากขนาดนั้น
Leonid Shevtsov

ฉันกำลังปรับใช้แอพรางนี้บนอินทราเน็ต หมายความว่าฉันจัดการไฟล์และสภาพแวดล้อมในเครื่อง หากคุณทราบวิธีแก้ปัญหาใด ๆ ที่ฉันสามารถใช้ได้โปรดแบ่งปัน
iGbanam


0

เพียงแค่ลบอัญมณีที่ล้าสมัยออกจาก Gemfile ของคุณ หากคุณกำลังพูดถึง Heroku (คุณไม่ได้พูดถึงเรื่องนั้น) กระสุนจะถูกรวบรวมแต่ละรุ่นใหม่โดยใช้เนื้อหาปัจจุบันของไฟล์นั้น


สิ่งนี้ไม่จำเป็นสำหรับ heroku ฉันต้องการลดขนาดของแอพรางเอง
iGbanam

0

เพียงดำเนินการเพื่อทำความสะอาดอัญมณีที่ล้าสมัยและลบคำเตือนการพิมพ์หลังจากมัด

bundle clean --force

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