จะบอกได้อย่างไรว่าแอปรางใช้อัญมณีเวอร์ชันใด


116

ฉันกำลังตรวจสอบแอพพลิเคชั่น - เซิร์ฟเวอร์ prod มีเจมเฉพาะสองเวอร์ชันติดตั้งอยู่ฉันจะทราบได้อย่างไรว่าแอพ prod ใช้เวอร์ชันใดอยู่


คุณถามว่ารางรุ่นไหนหรืออัญมณีรุ่นไหนบ้าง?
BJ Clark

1
อัญมณีรุ่นใด
Steve Brewer

ฉันมีอัญมณีที่ถูกแช่แข็งภายใต้ผู้ขาย / อัญมณีจากนั้นได้ติดตั้งอัญมณีเวอร์ชันใหม่กว่าในตำแหน่งอัญมณีเริ่มต้น ฉันกำลังมองหาบางอย่างจากรางที่ระบุว่า "ฉันโหลดอัญมณีนี้จากตำแหน่งนี้"
Steve Brewer

คำตอบ:


173

ใน Rails 3 และ Rails 4 ให้ใช้ bundle show

ใน Rails 2 rake gemsจะพิมพ์อัญมณีการอ้างอิงและเวอร์ชันที่ติดตั้งตรึง ฯลฯ


2
สิ่งนี้จะใช้ได้เฉพาะเมื่ออัญมณีตามที่ระบุไว้ในไฟล์ environment.rb หากนักพัฒนาต้องการเพียงแค่ที่ใดที่หนึ่งคราดอัญมณีจะไม่ทำงาน
John Hyland

(หรือในไฟล์ config / environment / * อย่างใดอย่างหนึ่งขึ้นอยู่กับ RAILS_ENV ของคุณ)
John Hyland

2
หากคุณต้องการกรองรายการให้ทำbundle show | grep gem_nameเช่นเข็มทิศ:bundle show | grep compass
Adam Waite

หมายความว่าอย่างไรเมื่อคุณพิมพ์ Bundle show และคุณได้รับ Gems จำนวนมากที่มีเวอร์ชันรวมถึง "rail 2.3.17) และคุณพิมพ์ rake gems และคุณจะได้สิ่งที่ดูเหมือนตำนาน (I = Installed ฯลฯ ) แต่ไม่มีอัญมณี / ฉันมีรางเวอร์ชัน 2 หรือไม่ฉันอาจมีรางเวอร์ชัน 2 และบันเดิลเลอร์ขั้นสูงกว่านี้ดี / ไม่ดีหรือไม่ (ใช่ฉันรู้ว่ามันไม่ดีที่มีรางรุ่นเก่าฉันต้องการทราบว่า มันเป็นความหายนะที่จะมีรางและชุดรวมที่ไม่ตรงกัน (ถ้าเป็น)
Brenda J. Butler

39

หากคุณใช้บันเดิลเลอร์คุณสามารถรับเวอร์ชันจากไฟล์

bundle show [gemname]

ฉันมาถึงคำถามนี้เพราะฉันพยายามจะย้ายไปใช้บันเดิลเลอร์ (อาจมีหลายคนด้วยเพราะตอนนี้ Heroku ต้องการสิ่งนี้)
GreenAsJade

เลิกใช้แล้ว ใช้bundle info [gemname]แทน
collimarco

37

ฉันใช้เวลานานกว่าที่คาดไว้ในการค้นหาและจัดเรียงข้อมูลเหล่านี้ดังนั้นฉันจึงต้องการโพสต์ไว้ที่นี่ในที่เดียวเพื่อให้คนอื่นดู ฉันต้องการชี้แจงเรื่องนี้เล็กน้อยสำหรับ Rails 3:

  • สคริปต์ / เกี่ยวกับการได้รับการแทนที่ด้วยrake about โดยมีรายละเอียดที่นี่ หากคุณกำลังสนใจรายการทุกคำสั่งเปลี่ยนแปลงบรรทัดราว 3 พวกเขาสามารถพบได้ที่นี่

  • rake gems ไม่ทำงานใน Rails 3 คุณควรใช้ไฟล์ bundle show

ตัวอย่างเช่นคุณสามารถบันทึกอัญมณีทุกเวอร์ชันลงในไฟล์เพื่อดูได้ด้วย:

gem list > all_gems.txt

และคุณสามารถดูว่าแอป Rails ของคุณใช้กับเวอร์ชันใด:

bundle show > project_gems.txt

การใช้โปรแกรมแก้ไขเช่น Vim คุณสามารถใช้ vimdiff เพื่อดูการเปลี่ยนแปลงได้อย่างง่ายดาย


6

อาจมีวิธีที่ตรงกว่าในการค้นหาสิ่งนี้ แต่ถ้าคุณโหลดคอนโซลและต้องการเวอร์ชันเฉพาะเช่นนี้:

gem 'RedCloth', '3.0.4'

จะบอกคุณว่าเวอร์ชันใดที่เปิดใช้งานแล้ว:

=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2

6

ในเทอร์มินัล

  bundle show <gem-name>
  bundle show | grep <gem-name>

หรือ

  gem list | grep <gem-name>

ตัวอย่างเช่น:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

นอกจากนี้ยังมีรายชื่อGemfile.lockอยู่ในไดเรกทอรีรากของแอปของคุณ

ด้วยเหตุนี้ฉันจึงออกGemfile.lockจาก.gitignoreไฟล์. สิ่งนี้ช่วยฉันได้มากกว่าหนึ่งครั้งเมื่อฉันลืมระบุเวอร์ชันของอัญมณีGemFileและอัญมณีได้รับการอัปเดตพร้อมกับการเปลี่ยนแปลงที่ไม่สมบูรณ์


4

ลองใช้script/about. ของคุณconfig/environment.rbยังมีข้อมูลเกี่ยวกับเรื่องนี้

ในของคุณconfig/environment.rbคุณสามารถระบุรุ่นของโดยเฉพาะอย่างยิ่งgemแอพลิเคชันควรใช้ อย่างไรก็ตามหากคุณgemติดตั้งหลายเวอร์ชันในเครื่องของคุณและคุณไม่ได้ระบุเวอร์ชันแอปพลิเคชันจะใช้อัญมณีเวอร์ชันล่าสุด


3
gem list <gemname>

มันจะแสดงอัญมณีที่ตรงกันทั้งหมดเช่นถ้ามีบางอัน

gem list rack

จากนั้นผลลัพธ์จะเป็นดังต่อไปนี้

*** LOCAL GEMS ***

rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)

2

script/aboutจะบอกให้คุณทราบว่าคุณกำลังใช้ Core Rails และ Rack เวอร์ชันใดอยู่ แต่ไม่ใช่อย่างอื่น ตามหลักการแล้วหากคุณมองเข้าไปconfig/environment.rbควรมีส่วนที่มีลักษณะดังนี้:

# Specify gems that this application depends on and have them installed with rake gems:install
# config.gem "bj"
# config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
# config.gem "sqlite3-ruby", :lib => "sqlite3"
# config.gem "aws-s3", :lib => "aws/s3"

ด้วยความโชคดีผู้เขียนแอปจะได้รวมอัญมณีและเวอร์ชันที่จำเป็นไว้ที่นั่น อย่างไรก็ตามเวอร์ชันเป็นทางเลือกในไฟล์นี้และในที่สุดก็ไม่มีสิ่งใดหยุดยั้งนักพัฒนาที่ไม่มีประสบการณ์เพียงแค่ตบrequire 'rubygems'; require 'some_random_thing'ที่ด้านบนของไฟล์ใดก็ได้

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


บทของคุณ / เกี่ยวกับอัญมณีหรือไม่? ฉันแค่บอกฉันว่าฉันใช้ทับทิมรางและสภาพแวดล้อมรุ่นใด
BJ Clark

ใช่ Rails (และ Rack) เป็นทั้งอัญมณีและสคริปต์ / about จะบอกคุณว่าเวอร์ชันใดกำลังทำงานอยู่พร้อมกับเนื้อหาหลัก Rails (ActiveSupport ฯลฯ ) แต่จะไม่บอกคุณเกี่ยวกับอัญมณีอื่น ๆ ขออภัยหากไม่ชัดเจน
John Hyland

1
bundle exec gem which gem_name

อาจเป็นสิ่งที่คุณสามารถใช้:

$ bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb

ฉันกำลังหาข้อมูลเกี่ยวกับเวอร์ชันของอัญมณีที่ติดตั้งทั่วโลกในโฟลเดอร์โดยพลการและสิ่งนี้ทำให้ฉันไปสู่สิ่งที่ฉันเชื่อว่าเป็นวิธีการแก้ปัญหาที่ถูกต้อง -gem which gem_name
cori

1

มัดแสดง gemname Ie สำหรับการประดิษฐ์ที่คุณต้องเขียนเช่น

bundle show devise

และจะพิมพ์เวอร์ชันอัญมณีปัจจุบันออกมา


0

ลองอันนี้สำหรับอัญมณีท้องถิ่น:

gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

หากคุณใช้บันเดิล:

bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

0

ใช้ในเวอร์ชันที่ใหม่กว่า bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`

0

หากคุณใช้บันเดิลเลอร์คุณสามารถรับเวอร์ชันโดยใช้:

bundle info [gemname]

-8

ใน Gemfile ควรมีคำตอบ:

gem 'rails', '4.0.0.rc1'

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