Raylar uygulamasının hangi bir gem sürümünü kullandığını nasıl anlarsınız?


116

Bir raylar uygulamasını araştırıyorum - üretim sunucusunda belirli bir mücevherin iki sürümü yüklü, üretim uygulamasının hangi sürümü kullandığını nasıl anlayabilirim?


Hangi ray versiyonunu veya başka bir cevherin hangi versiyonunu soruyorsunuz?
— BJ Clark

1
Belirli bir mücevherin hangi versiyonu.
— Steve Brewer

Satıcılar / mücevherler altında dondurulmuş bir mücevherim var ve ardından mücevherin daha yeni bir sürümü varsayılan mücevherler konumunda yüklü. Raylardan "Bu mücevheri bu yerden yükledim" yazan bir şeyden bakıyorum.
— Steve Brewer

Yanıtlar:


173

Raylar 3 ve Raylar 4'te bundle show

Rails 2'de rake gemshangi taşların, bağımlılıkların ve sürümlerin yüklü, dondurulmuş vb. Olduğunu yazdırır.


2
Bu yalnızca taş, environment.rb dosyasında belirtildiği gibi çalışır. Geliştirici sadece bir yerde talep ettiyse, tırmık taşları çalışmayacaktır.
— John Hyland

(Veya RAILS_ENV'nize bağlı olarak config / environment / * dosyalarından birinde.)
— John Hyland

2
Listeyi filtrelemek istiyorsanız bundle show | grep gem_name, pusula için şunu yapın:bundle show | grep compass
— Adam Waite

Öyleyse, bundle show yazdığınızda ve "rails 2.3.17) dahil sürümleri olan bir sürü Gems elde ettiğinizde ve rake gems yazarsanız ve bir efsaneye benzeyen (I = Installed, vb.) Ama mücevher / Rails sürüm 2'ye sahip miyim yoksa yok mu? Belki raylar sürüm 2'ye ve daha gelişmiş bir paketleyiciye sahibim? Bu iyi / kötü mü? (Evet, bu kadar eski bir ray sürümüne sahip olmanın kötü olduğunu biliyorum, bilmek istiyorum Bu kadar uyumsuz (eğer öyleyse) raylar ve paketleyiciye sahip olmak felakettir.
— Brenda J. Butler

39

Paketleyiciyi kullanıyorsanız, sürümü şuradan edinebilirsiniz:

bundle show [gemname]

Hareket etmeye çalışıyorum çünkü bu soruya geldi üzere (Heroku şimdi bu gerektirdiğinden, ayrıca muhtemelen birçok kişi) paketleyici
— GreenAsJade

Bu kullanımdan kaldırılmıştır. bundle info [gemname]Bunun yerine kullanın .
— collimarco

37

Bu bilgileri bulmam ve gözden geçirmem beklenenden uzun sürdü, bu yüzden başkalarının görmesi için buraya tek bir yere göndermek istedim. Ayrıca Rails 3 için bunu biraz açıklığa kavuşturmak istedim:

  • script / about ile değiştirildi rake about Detaylar burada . Eğer ilgileniyorsanız, Rails 3 için tüm komut satırı değişikliklerinin bir listesini burada bulabilirsiniz .

  • rake gems Rails 3'te çalışmaz. Bunun yerine kullanmalısınız bundle show

Örnek olarak, mücevherlerinizin tüm sürümlerini aşağıdakilerle görüntülemek için bir dosyaya kaydedebilirsiniz:

gem list > all_gems.txt

ve Rails uygulamanızın aşağıdakilerle hangi sürümleri kullandığını görebilirsiniz:

bundle show > project_gems.txt

Vim gibi bir düzenleyici kullanarak değişiklikleri görmek için vimdiff'i kolayca kullanabilirsiniz.


6

Muhtemelen bunu bulmanın daha doğrudan bir yolu vardır, ancak bir konsol yüklerseniz ve bunun gibi belirli bir sürüme ihtiyaç duyarsanız:

gem 'RedCloth', '3.0.4'

Size hangi sürümün zaten etkinleştirildiğini söyleyecektir:

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

6

Terminalde

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

veya

  gem list | grep <gem-name>

Örneğin:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

Ayrıca Gemfile.lockuygulamanızın kök dizininde bulunan bir liste vardır .

Ayrılmak Bu nedenle Gemfile.lockSesimin dışarı .gitignore. Gem versiyonunu belirtmeyi unuttuğumda bu beni bir kereden fazla kurtardı GemFileve bir mücevher kırılan değişikliklerle güncellendi.


4

Kullanmayı deneyin script/about. Sizin config/environment.rbde bununla ilgili bilgiler var.

Gözlerinde farklı config/environment.rbhangi belirli sürümü belirtebilirsiniz gemuygulama kullanmalıdır. Ancak gem, makinenizde kurulu bir sürümün birden fazla sürümü varsa ve sürümünü belirtmezseniz, o gem'in en son sürümü uygulama tarafından kullanılacaktır.


3
gem list <gemname>

Eşleşen tüm mücevherleri gösterecektir, örneğin biri varsa

gem list rack

Daha sonra çıktı aşağıdaki gibi olacaktır

*** 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çekirdek Rails ve Rack taşlarının hangi sürümlerini kullandığınızı size söyleyecektir, ancak başka bir şey söylemeyecektir. İdeal olarak, içeri bakarsanız config/environment.rb, şuna benzeyen bir bölüm olmalıdır:

# 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"

Şansınız varsa, uygulamanın yazarı gerekli mücevherleri ve sürümleri oraya dahil etmiş olacaktır. Bununla birlikte, bu dosyadaki sürümler isteğe bağlıdır ve sonuçta hiçbir şey deneyimsiz bir geliştiricinin require 'rubygems'; require 'some_random_thing'herhangi bir dosyanın üstüne bir tokat atmasını engellemez .

Bir mücevherin gerekli olduğunu, ancak herhangi bir sürüm belirtilmediğini gem listgörürseniz, sistemdeki tüm mücevherlerin tüm sürümlerini görmek için yazabilirsiniz . Varsayılan olarak, mevcut en son olanı kullanacaktır.


Senaryonuz / about size mücevherlerden bahsediyor mu? Benimki bana Ruby'nin, rayların ve ortamın hangi sürümünü kullandığımı söylüyor.
— BJ Clark

Doğru, Rails (ve Rack) her ikisi de değerli ve script / about size bunların hangi sürümlerinin çalıştığını söyleyecek ve temel Rails öğelerinin (ActiveSupport, vb.) Yanı sıra size diğer mücevherler hakkında bilgi vermeyecek. Net değilse özür dilerim.
— John Hyland

1
bundle exec gem which gem_name

Muhtemelen kullanabileceğiniz şey:

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

Küresel olarak yüklenmiş bir geminin hangi sürümünün rastgele bir klasörde yürütüldüğü hakkında bilgi arıyordum ve bu beni doğru çözüm olduğuna inandığım şeye götürdü -gem which gem_name
— cori

1

bundle show gemname Yani plan için yazmalısın

bundle show devise

ve mevcut mücevher versiyonunun çıktısını alacaktır.


0

bunu yerel mücevher için deneyin:

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

Paket kullanıyorsanız:

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

0

Daha yeni versiyonda bundle show gem_name

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

0

Paketleyiciyi kullanıyorsanız, sürümü şu şekilde edinebilirsiniz:

bundle info [gemname]

-8

Gemfile'da cevap olmalı:

gem 'rails', '4.0.0.rc1'

2
Gemfileher zaman açıkça bir sürüm numarası bildirmez.
— Tass
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.