Ich untersuche eine Rails-App. Auf dem Prod-Server sind zwei Versionen eines bestimmten Gems installiert. Wie kann ich feststellen, welche Version die Prod-App verwendet?
Ich untersuche eine Rails-App. Auf dem Prod-Server sind zwei Versionen eines bestimmten Gems installiert. Wie kann ich feststellen, welche Version die Prod-App verwendet?
Antworten:
Verwenden Sie in Schienen 3 und Schienen 4 bundle show
Druckt in Rails 2 rake gems
aus, welche Edelsteine, Abhängigkeiten und Versionen installiert, eingefroren usw. sind.
bundle show | grep gem_name
beispielsweise für den Kompass:bundle show | grep compass
Wenn Sie Bundler verwenden, können Sie die Version von erhalten
bundle show [gemname]
bundle info [gemname]
stattdessen.
Ich habe länger als erwartet gebraucht, um diese Informationen zu finden und zu sortieren, daher wollte ich sie hier an einem Ort veröffentlichen, damit andere sie sehen können. Ich wollte dies auch ein wenig für Rails 3 klarstellen:
script / about wurde ersetzt durch rake about
Die Details finden Sie hier . Wenn Sie interessiert sind, finden Sie hier eine Liste aller Befehlszeilenänderungen für Rails 3 .
rake gems
funktioniert nicht in Rails 3. Stattdessen sollten Sie verwenden bundle show
Beispielsweise können Sie alle Versionen Ihrer Edelsteine in einer Datei speichern, um sie anzuzeigen:
gem list > all_gems.txt
und Sie können sehen, mit welchen Versionen Ihre Rails-App verwendet:
bundle show > project_gems.txt
Mit einem Editor wie Vim können Sie die Änderungen ganz einfach mit vimdiff anzeigen
Es gibt wahrscheinlich einen direkteren Weg, dies herauszufinden, aber wenn Sie eine Konsole laden und eine bestimmte Version wie diese benötigen:
gem 'RedCloth', '3.0.4'
Hier erfahren Sie, 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 im Gemfile.lock
Stammverzeichnis Ihrer App.
Aus diesem Grund lasse Gemfile.lock
ich meine aus .gitignore
. Dies hat mich mehr als einmal gerettet, als ich vergessen habe, die Edelsteinversion in anzugeben GemFile
, und ein Edelstein mit aktuellen Änderungen aktualisiert wurde.
Versuchen Sie es mit script/about
. Sie haben config/environment.rb
auch Informationen darüber.
In Ihrem können config/environment.rb
Sie angeben, welche Version einer bestimmten gem
Anwendung verwendet werden soll. Wenn Sie jedoch mehrere Versionen eines gem
auf Ihrem Computer installiert haben und die Version nicht angeben, wird die neueste Version dieses Gems von der Anwendung verwendet.
gem list <gemname>
Es werden alle passenden Edelsteine angezeigt, z. B. wenn jemand dies tut
gem list rack
Dann wird die Ausgabe wie folgt sein
*** LOCAL GEMS ***
rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
script/about
Hier erfahren Sie, welche Versionen der wichtigsten Rails- und Rack-Edelsteine Sie verwenden, aber sonst nichts. Wenn Sie hineinschauen config/environment.rb
, sollte es im Idealfall einen Abschnitt geben, der so 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 hat der Autor der App alle erforderlichen Edelsteine und Versionen dort aufgenommen. Die Versionen in dieser Datei sind jedoch optional, und letztendlich hindert nichts einen unerfahrenen Entwickler daran, einfach einen require 'rubygems'; require 'some_random_thing'
oben auf eine bestimmte Datei zu setzen.
Wenn Sie sehen, dass ein Edelstein erforderlich ist, aber keine Version angegeben ist, können Sie eingeben gem list
, um alle Versionen aller Edelsteine auf dem System anzuzeigen. Standardmäßig wird die neueste verfügbare Version verwendet.
bundle exec gem which gem_name
Ist wahrscheinlich 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
gem which gem_name
Bundle Show Gemname Ie für Gerät, das Sie gerne schreiben müssen
bundle show devise
und es wird die aktuelle Edelsteinversion ausgedruckt.
Versuchen Sie dieses für lokales Juwel:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Wenn Sie Bundle verwenden:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Wenn Sie Bundler verwenden, können Sie die Version mit folgender Adresse erhalten:
bundle info [gemname]