Cara mengetahui versi permata mana yang digunakan aplikasi rel


116

Saya sedang menyelidiki aplikasi rel - server prod memiliki dua versi dari permata tertentu yang terpasang, bagaimana cara mengetahui versi mana yang digunakan aplikasi prod?


Apakah Anda bertanya versi rel yang mana, atau versi yang mana dari beberapa permata lainnya?
BJ Clark

1
Versi permata tertentu yang mana.
Steve Brewer

Saya memiliki permata yang dibekukan di bawah vendor / permata, dan kemudian memiliki versi permata yang lebih baru yang dipasang di lokasi permata default. Saya mencari sesuatu dari rel yang mengatakan "Saya memuat permata ini dari lokasi ini".
Steve Brewer

Jawaban:


173

Di Rails 3 dan Rails 4, gunakan bundle show

Di Rails 2, rake gemsakan mencetak permata, dependensi, dan versi apa yang diinstal, dibekukan, dll.


2
Ini hanya akan berfungsi jika permata seperti yang ditentukan di file environment.rb. Jika pengembang hanya membutuhkannya di suatu tempat, rake gems tidak akan berfungsi.
John Hyland

(Atau di salah satu file config / environment / *, tergantung pada RAILS_ENV Anda.)
John Hyland

2
Jika Anda ingin memfilter daftar lakukan bundle show | grep gem_name, contoh untuk kompas:bundle show | grep compass
Adam Waite

Jadi apa artinya ketika Anda mengetik bundle show dan Anda mendapatkan banyak Permata dengan versi termasuk "rails 2.3.17) dan Anda mengetik rake gems dan Anda mendapatkan apa yang tampak seperti legenda (I = Dipasang, dll) tetapi tidak ada permata / versi? Apakah saya memiliki rel versi 2 atau tidak? Mungkin saya memiliki rel versi 2 dan bundler yang lebih maju? Apakah ini baik / buruk? (Ya, saya tahu buruk memiliki versi rel yang lama, saya ingin tahu apakah sungguh bencana untuk memiliki rel dan bundler yang tidak serasi (jika memang ada).
Brenda J. Butler

39

Jika Anda menggunakan bundler, maka Anda bisa mendapatkan versinya dari

bundle show [gemname]

Saya datang ke pertanyaan ini karena saya mencoba untuk pindah ke bundler (mungkin banyak orang juga, karena Heroku sekarang memerlukan ini)
GreenAsJade

Ini sudah usang. Gunakan bundle info [gemname]sebagai gantinya.
collimarco

37

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


6

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

6

Di terminal

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

atau

  gem list | grep <gem-name>

Sebagai contoh:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

Ada juga daftar di Gemfile.lock, terletak di direktori root aplikasi Anda.

Untuk alasan ini saya meninggalkan Gemfile.lockkeluar dari saya .gitignore. Ini telah menyelamatkan saya lebih dari sekali ketika saya lupa menentukan versi permata GemFile, dan permata diperbarui dengan perubahan yang melanggar.


4

Coba gunakan script/about. Anda config/environment.rbjuga memiliki informasi tentang itu.

Di Anda, config/environment.rbAnda dapat menentukan versi gemaplikasi tertentu yang harus digunakan. Namun jika Anda memiliki beberapa versi yang gemterinstal di mesin Anda dan Anda tidak menentukan versinya, versi terbaru dari permata itu akan digunakan oleh aplikasi.


3
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)

2

script/aboutakan 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 listuntuk melihat semua versi dari semua permata di sistem. Secara default, ini akan menggunakan yang terbaru yang tersedia.


Apakah naskah Anda / tentang memberi tahu Anda tentang permata? Milik saya hanya memberi tahu saya versi ruby, rel, dan lingkungan apa yang saya gunakan.
BJ Clark

Benar, Rails (dan Rack) keduanya permata, dan script / about akan memberi tahu Anda versi apa dari mereka yang sedang berjalan, bersama dengan hal-hal inti Rails (ActiveSupport, dll) tetapi tidak akan memberi tahu Anda tentang permata lainnya. Maaf jika itu tidak jelas.
John Hyland

1
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

Saya sedang mencari informasi tentang versi mana dari permata yang dipasang secara global yang dijalankan dalam folder sembarangan dan ini membawa saya ke apa yang saya yakini sebagai solusi yang tepat -gem which gem_name
cori

1

bundel menunjukkan nama permata Ie untuk merancang Anda harus menulis seperti

bundle show devise

dan itu akan mencetak versi permata saat ini.


0

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|$)'

0

Dalam versi yang lebih baru, digunakan bundle show gem_name

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

0

Jika Anda menggunakan bundler, maka Anda bisa mendapatkan versinya menggunakan:

bundle info [gemname]

-8

Di Gemfile, seharusnya ada jawabannya:

gem 'rails', '4.0.0.rc1'

2
Gemfiletidak akan selalu secara eksplisit menyatakan nomor versi.
Tass
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.