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?

War es hilfreich?

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 verwenden bundle 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

schreiben
bundle show devise

, und es wird die aktuelle Version gem Ausdruck.

In Gemfile, sollte die Antwort sein:

gem 'rails', '4.0.0.rc1'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top