Saya sedang menyelidiki aplikasi rel - server prod memiliki dua versi dari permata tertentu yang terpasang, bagaimana cara mengetahui versi mana yang digunakan aplikasi prod?
Saya sedang menyelidiki aplikasi rel - server prod memiliki dua versi dari permata tertentu yang terpasang, bagaimana cara mengetahui versi mana yang digunakan aplikasi prod?
Jawaban:
Di Rails 3 dan Rails 4, gunakan bundle show
Di Rails 2, rake gems
akan mencetak permata, dependensi, dan versi apa yang diinstal, dibekukan, dll.
bundle show | grep gem_name
, contoh untuk kompas:bundle show | grep compass
Jika Anda menggunakan bundler, maka Anda bisa mendapatkan versinya dari
bundle show [gemname]
bundle info [gemname]
sebagai gantinya.
Saya membutuhkan waktu lebih lama dari yang diharapkan untuk menemukan dan memilah-milah informasi ini, jadi saya ingin mempostingnya di sini di satu tempat agar dapat dilihat orang lain. Saya juga ingin menjelaskan ini sedikit untuk Rails 3:
script / about telah diganti dengan rake about
Detailnya ada di sini . Jika Anda tertarik, daftar semua perubahan baris perintah untuk Rails 3 dapat ditemukan di sini .
rake gems
tidak bekerja di Rails 3. Sebaliknya, Anda harus menggunakan bundle show
Sebagai contoh, Anda dapat menyimpan semua versi permata Anda ke file untuk dilihat dengan:
gem list > all_gems.txt
dan Anda dapat melihat versi apa yang digunakan aplikasi Rails Anda dengan:
bundle show > project_gems.txt
Menggunakan editor seperti Vim Anda dapat dengan mudah menggunakan vimdiff untuk melihat perubahannya
Mungkin ada cara yang lebih langsung untuk mengetahuinya, tetapi jika Anda memuat konsol dan memerlukan versi tertentu seperti:
gem 'RedCloth', '3.0.4'
Ini akan memberi tahu Anda versi apa yang sudah diaktifkan:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
Ada juga daftar di Gemfile.lock
, terletak di direktori root aplikasi Anda.
Untuk alasan ini saya meninggalkan Gemfile.lock
keluar dari saya .gitignore
. Ini telah menyelamatkan saya lebih dari sekali ketika saya lupa menentukan versi permata GemFile
, dan permata diperbarui dengan perubahan yang melanggar.
Coba gunakan script/about
. Anda config/environment.rb
juga memiliki informasi tentang itu.
Di Anda, config/environment.rb
Anda dapat menentukan versi gem
aplikasi tertentu yang harus digunakan. Namun jika Anda memiliki beberapa versi yang gem
terinstal di mesin Anda dan Anda tidak menentukan versinya, versi terbaru dari permata itu akan digunakan oleh aplikasi.
gem list <gemname>
Ini akan menampilkan semua permata yang cocok misalnya jika ada yang melakukannya
gem list rack
Maka outputnya adalah sebagai berikut
*** LOCAL GEMS ***
rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
script/about
akan memberi tahu Anda versi permata inti Rails dan Rack yang Anda gunakan, tetapi tidak yang lainnya. Idealnya, jika Anda melihat ke dalam config/environment.rb
, seharusnya ada bagian yang terlihat seperti ini:
# 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"
Dengan sedikit keberuntungan, pembuat aplikasi akan memasukkan permata dan versi yang diperlukan di sana. Namun, versinya adalah opsional dalam file ini, dan pada akhirnya tidak ada yang menghentikan pengembang yang tidak berpengalaman untuk hanya menampar require 'rubygems'; require 'some_random_thing'
di bagian atas file yang diberikan.
Jika Anda melihat bahwa permata diperlukan, tetapi tidak ada versi yang ditentukan, Anda dapat mengetik gem list
untuk melihat semua versi dari semua permata di sistem. Secara default, ini akan menggunakan yang terbaru yang tersedia.
bundle exec gem which gem_name
Mungkin itulah yang dapat Anda gunakan:
$› 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
bundel menunjukkan nama permata Ie untuk merancang Anda harus menulis seperti
bundle show devise
dan itu akan mencetak versi permata saat ini.
coba yang ini untuk permata lokal:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Jika Anda menggunakan bundel:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Jika Anda menggunakan bundler, maka Anda bisa mendapatkan versinya menggunakan:
bundle info [gemname]