Wie man erkennt, welche Version eines Edelsteins eine Rails-App verwendet


116

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?


Fragen Sie, welche Version von Schienen oder welche Version eines anderen Edelsteins?
BJ Clark

1
Welche Version eines bestimmten Edelsteins.
Steve Brewer

Ich habe einen Edelstein unter Anbietern / Edelsteinen eingefroren und dann eine neuere Version des Edelsteins am Standardspeicherort für Edelsteine ​​installiert. Ich schaue von etwas von Schienen, das sagt "Ich habe dieses Juwel von diesem Ort geladen".
Steve Brewer

Antworten:


172

Verwenden Sie in Schienen 3 und Schienen 4 bundle show

Druckt in Rails 2 rake gemsaus, welche Edelsteine, Abhängigkeiten und Versionen installiert, eingefroren usw. sind.


2
Dies funktioniert nur, wenn der Edelstein in der Datei environment.rb angegeben wurde. Wenn der Entwickler es nur irgendwo benötigt, funktionieren Rake-Edelsteine ​​nicht.
John Hyland

(Oder in einer der Konfigurations- / Umgebungsdateien / * -Dateien, abhängig von Ihrem RAILS_ENV.)
John Hyland

2
Wenn Sie die Liste filtern möchten, tun Sie dies bundle show | grep gem_namebeispielsweise für den Kompass:bundle show | grep compass
Adam Waite

Was bedeutet es also, wenn Sie Bundle Show eingeben und eine Reihe von Edelsteinen mit Versionen wie "Rails 2.3.17) erhalten und Rake-Edelsteine ​​eingeben und eine Legende erhalten (I = Installiert usw.), aber keine Edelsteine ​​/ Versionen? Habe ich Rails Version 2 oder nicht? Vielleicht habe ich Rails Version 2 und einen fortgeschritteneren Bundler? Ist das gut / schlecht? (Ja, ich weiß, dass es schlecht ist, eine so alte Version von Rails zu haben, ich möchte wissen, ob Es ist katastrophal, solch eine nicht übereinstimmende (wenn es ist) Schiene und Bündler zu haben.
Brenda J. Butler

39

Wenn Sie Bundler verwenden, können Sie die Version von erhalten

bundle show [gemname]

Ich bin auf diese Frage gekommen, weil ich versuche, zu Bundler zu wechseln (wahrscheinlich auch viele Leute, weil Heroku dies jetzt benötigt)
GreenAsJade

Dies ist veraltet. Verwenden Sie bundle info [gemname]stattdessen.
Collimarco

37

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


6

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

6

Im Terminal

  bundle show <gem-name>
  bundle show | grep <gem-name>

oder

  gem list | grep <gem-name>

Beispielsweise:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

Es gibt auch eine Liste im Gemfile.lockStammverzeichnis Ihrer App.

Aus diesem Grund lasse Gemfile.lockich 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.


4

Versuchen Sie es mit script/about. Sie haben config/environment.rbauch Informationen darüber.

In Ihrem können config/environment.rbSie angeben, welche Version einer bestimmten gemAnwendung verwendet werden soll. Wenn Sie jedoch mehrere Versionen eines gemauf Ihrem Computer installiert haben und die Version nicht angeben, wird die neueste Version dieses Gems von der Anwendung verwendet.


3
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)

2

script/aboutHier 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.


Erzählt Ihnen Ihr Skript / about etwas über Edelsteine? Meins sagt mir nur, welche Version von Rubin, Schienen und Umgebung ich benutze.
BJ Clark

Richtig, Rails (und Rack) sind beide Edelsteine, und script / about zeigt Ihnen, welche Versionen von ihnen ausgeführt werden, zusammen mit dem Kernmaterial von Rails (ActiveSupport usw.), aber es sagt Ihnen nichts über andere Edelsteine. Entschuldigung, wenn das nicht klar war.
John Hyland

1
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

Ich suchte nach Informationen darüber, welche Version eines global installierten Edelsteins in einem beliebigen Ordner ausgeführt wurde, und dies führte mich zu der meiner Meinung nach richtigen Lösung -gem which gem_name
cori

1

Bundle Show Gemname Ie für Gerät, das Sie gerne schreiben müssen

bundle show devise

und es wird die aktuelle Edelsteinversion ausgedruckt.


0

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|$)'

0

In neuerer Version verwendet bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`

0

Wenn Sie Bundler verwenden, können Sie die Version mit folgender Adresse erhalten:

bundle info [gemname]

-8

In Gemfile sollte es die Antwort geben:

gem 'rails', '4.0.0.rc1'

2
Gemfilewird nicht immer explizit eine Versionsnummer deklarieren.
Tass
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.