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.