ฉันกำลังตรวจสอบแอพพลิเคชั่น - เซิร์ฟเวอร์ prod มีเจมเฉพาะสองเวอร์ชันติดตั้งอยู่ฉันจะทราบได้อย่างไรว่าแอพ prod ใช้เวอร์ชันใดอยู่
ฉันกำลังตรวจสอบแอพพลิเคชั่น - เซิร์ฟเวอร์ prod มีเจมเฉพาะสองเวอร์ชันติดตั้งอยู่ฉันจะทราบได้อย่างไรว่าแอพ prod ใช้เวอร์ชันใดอยู่
คำตอบ:
ใน Rails 3 และ Rails 4 ให้ใช้ bundle show
ใน Rails 2 rake gems
จะพิมพ์อัญมณีการอ้างอิงและเวอร์ชันที่ติดตั้งตรึง ฯลฯ
bundle show | grep gem_name
เช่นเข็มทิศ:bundle show | grep compass
หากคุณใช้บันเดิลเลอร์คุณสามารถรับเวอร์ชันจากไฟล์
bundle show [gemname]
bundle info [gemname]
แทน
ฉันใช้เวลานานกว่าที่คาดไว้ในการค้นหาและจัดเรียงข้อมูลเหล่านี้ดังนั้นฉันจึงต้องการโพสต์ไว้ที่นี่ในที่เดียวเพื่อให้คนอื่นดู ฉันต้องการชี้แจงเรื่องนี้เล็กน้อยสำหรับ Rails 3:
สคริปต์ / เกี่ยวกับการได้รับการแทนที่ด้วยrake about
โดยมีรายละเอียดที่นี่ หากคุณกำลังสนใจรายการทุกคำสั่งเปลี่ยนแปลงบรรทัดราว 3 พวกเขาสามารถพบได้ที่นี่
rake gems
ไม่ทำงานใน Rails 3 คุณควรใช้ไฟล์ bundle show
ตัวอย่างเช่นคุณสามารถบันทึกอัญมณีทุกเวอร์ชันลงในไฟล์เพื่อดูได้ด้วย:
gem list > all_gems.txt
และคุณสามารถดูว่าแอป Rails ของคุณใช้กับเวอร์ชันใด:
bundle show > project_gems.txt
การใช้โปรแกรมแก้ไขเช่น Vim คุณสามารถใช้ vimdiff เพื่อดูการเปลี่ยนแปลงได้อย่างง่ายดาย
อาจมีวิธีที่ตรงกว่าในการค้นหาสิ่งนี้ แต่ถ้าคุณโหลดคอนโซลและต้องการเวอร์ชันเฉพาะเช่นนี้:
gem 'RedCloth', '3.0.4'
จะบอกคุณว่าเวอร์ชันใดที่เปิดใช้งานแล้ว:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
ในเทอร์มินัล
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
นอกจากนี้ยังมีรายชื่อGemfile.lock
อยู่ในไดเรกทอรีรากของแอปของคุณ
ด้วยเหตุนี้ฉันจึงออกGemfile.lock
จาก.gitignore
ไฟล์. สิ่งนี้ช่วยฉันได้มากกว่าหนึ่งครั้งเมื่อฉันลืมระบุเวอร์ชันของอัญมณีGemFile
และอัญมณีได้รับการอัปเดตพร้อมกับการเปลี่ยนแปลงที่ไม่สมบูรณ์
ลองใช้script/about
. ของคุณconfig/environment.rb
ยังมีข้อมูลเกี่ยวกับเรื่องนี้
ในของคุณconfig/environment.rb
คุณสามารถระบุรุ่นของโดยเฉพาะอย่างยิ่งgem
แอพลิเคชันควรใช้ อย่างไรก็ตามหากคุณgem
ติดตั้งหลายเวอร์ชันในเครื่องของคุณและคุณไม่ได้ระบุเวอร์ชันแอปพลิเคชันจะใช้อัญมณีเวอร์ชันล่าสุด
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)
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
เพื่อดูเวอร์ชันทั้งหมดของอัญมณีทั้งหมดในระบบ โดยค่าเริ่มต้นจะใช้เวอร์ชันล่าสุดที่มีอยู่
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
มัดแสดง gemname Ie สำหรับการประดิษฐ์ที่คุณต้องเขียนเช่น
bundle show devise
และจะพิมพ์เวอร์ชันอัญมณีปัจจุบันออกมา
ลองอันนี้สำหรับอัญมณีท้องถิ่น:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
หากคุณใช้บันเดิล:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
ใช้ในเวอร์ชันที่ใหม่กว่า bundle show gem_name
[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`
หากคุณใช้บันเดิลเลอร์คุณสามารถรับเวอร์ชันโดยใช้:
bundle info [gemname]
ใน Gemfile ควรมีคำตอบ:
gem 'rails', '4.0.0.rc1'
Gemfile
จะไม่ประกาศหมายเลขเวอร์ชันอย่างชัดเจนเสมอไป