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?
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?
Yanıtlar:
Raylar 3 ve Raylar 4'te bundle show
Rails 2'de rake gems
hangi taşların, bağımlılıkların ve sürümlerin yüklü, dondurulmuş vb. Olduğunu yazdırır.
bundle show | grep gem_name
, pusula için şunu yapın:bundle show | grep compass
Paketleyiciyi kullanıyorsanız, sürümü şuradan edinebilirsiniz:
bundle show [gemname]
bundle info [gemname]
Bunun yerine kullanın .
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.
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
Kullanmayı deneyin script/about
. Sizin config/environment.rb
de bununla ilgili bilgiler var.
Gözlerinde farklı config/environment.rb
hangi belirli sürümü belirtebilirsiniz gem
uygulama 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.
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)
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 list
gö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.
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
gem which gem_name
bundle show gemname Yani plan için yazmalısın
bundle show devise
ve mevcut mücevher versiyonunun çıktısını alacaktır.
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|$)'
Paketleyiciyi kullanıyorsanız, sürümü şu şekilde edinebilirsiniz:
bundle info [gemname]