Wie zu sagen, welche version von gem einer rails-Anwendung
-
06-07-2019 - |
Frage
Ich bin die Untersuchung einer rails-app - dem prod-server hat zwei version einer bestimmten Edelstein installiert, wie kann ich feststellen, welche version der prod-app verwenden?
Lösung
In Rails 3 und Rails 4, Verwendung bundle show
In Rails 2, rake gems
druckt heraus, welche Edelsteine, Abhängigkeiten und Versionen installiert sind, eingefroren, etc.
Andere Tipps
Wenn Sie bundler verwenden, dann können Sie die Version von get
bundle show [gemname]
Es dauerte länger als erwartet zu finden, und Sortieren Sie durch diese Informationen also wollte ich poste es hier in einem Ort zum anderen zu sehen.Ich wollte auch zu klären, dies ein bisschen für Rails 3:
script/about-wurde ersetzt durch
rake about
Die details sind hier.Wenn Sie daran interessiert sind, eine Liste aller Kommandozeilen-änderungen für Rails 3 können Sie gefunden werden hier.rake gems
funktioniert nicht in Rails 3.Stattdessen sollten Sie verwendenbundle show
Als ein Beispiel, können Sie alle Versionen Ihrer Edelsteine, um eine Datei zur Anzeige mit:
gem list > all_gems.txt
und Sie können sehen, welche Versionen Ihre Rails-Anwendung mit:
bundle show > project_gems.txt
Mit einem editor wie Vim, die Sie problemlos verwenden können, vimdiff um die änderungen zu sehen
Es ist wahrscheinlich ein direkterer Weg, dies heraus zu finden, aber wenn Sie eine Konsole laden und eine bestimmte Version benötigen etwa so:
gem 'RedCloth', '3.0.4'
Es wird Ihnen sagen, welche Version bereits aktiviert ist:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
Es gibt auch eine Liste in Gemfile.lock
, im Stammverzeichnis Ihrer App befindet.
Aus diesem Grund lasse ich Gemfile.lock
aus meinem .gitignore
. Das hat mich gerettet mehr als einmal, wenn ich die gem Version in GemFile
angeben vergessen, und ein Juwel mit dem Brechen von Änderungen wurde aktualisiert.
Im Terminal
bundle show [gem-name]
bundle show | grep [gem-name]
oder
gem list | grep [gem-name]
[gem-name] sollte gem Namen ersetzt werden Sie gehen zu suchen.
Versuchen script/about
verwenden. Ihre config/environment.rb
hat auch Informationen über sie.
In Ihrem config/environment.rb
können Sie festlegen, welche Version eines bestimmten gem
sollte die Anwendung verwenden. Allerdings, wenn Sie mehrere Versionen eines gem
auf Ihrem Computer installiert haben und Sie nicht die Version angeben, die neueste Version dieses Juwel wird von der Anwendung verwendet werden.
gem list <gemname>
Es wird zeigen Sie alle das passende Edelsteine.e.g wenn man einige tun
gem list rack
Dann th-Ausgabe wird wie folgt
*** LOCAL GEMS ***
rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
script/about
wird Ihnen sagen, welche Versionen des core-Schienen-und Rack-Edelsteine, die Sie verwenden, aber nichts anderes.Ideal, wenn man sich in config/environment.rb
, sollte es einen Abschnitt, der wie folgt aussieht:
# 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"
Mit etwas Glück, den Autor der app enthalten alle erforderlichen Edelsteine und Versionen gibt.Aber die Versionen sind optional in dieser Datei, und letztlich nichts hält einen unerfahrenen Entwickler von just slapping a require 'rubygems'; require 'some_random_thing'
an der Spitze einer bestimmten Datei.
Wenn Sie sehen, dass ein gem ist erforderlich, aber keine version angegeben ist, geben Sie gem list
um zu sehen alle Versionen von all den Edelsteinen, die auf das system.Standardmäßig wird es mit der neuesten verfügbaren.
bundle exec gem which gem_name
Ist wahrscheinlich das, was Sie verwenden können:
$› bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb
versuchen, diesen für lokales Juwel:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Wenn Sie Bundle:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Bündel zeigen gemname Das heißt für devise müssen Sie wie
schreibenbundle show devise
, und es wird die aktuelle Version gem Ausdruck.
In Gemfile, sollte die Antwort sein:
gem 'rails', '4.0.0.rc1'