web-dev-qa-db-ger.com

So erfahren Sie, welche Version eines Edelsteins eine Rails-App verwendet

Ich untersuche eine Rails-App. Auf dem Prod-Server sind zwei Versionen eines bestimmten Gem installiert. Wie kann ich feststellen, welche Version die Prod-App verwendet?

111
Steve Brewer

Verwenden Sie in Rails 3 und Rails 4 bundle show

In Rails 2 gibt rake gems aus, welche Edelsteine, Abhängigkeiten und Versionen installiert, eingefroren usw. werden.

160
BJ Clark

Ich brauchte länger als erwartet, um diese Informationen zu finden und zu sortieren. Ich wollte sie hier an einer Stelle veröffentlichen, damit andere sie sehen können. Ich wollte das auch etwas für Rails 3 verdeutlichen:

  • script/about wurde durch rake about ersetzt. Die Details sind hier . Wenn Sie sich für eine Liste aller Befehlszeilenänderungen für Rails 3 interessieren, finden Sie hier .

  • rake gems funktioniert nicht in Rails 3. Stattdessen sollten Sie bundle show verwenden.

Sie können beispielsweise alle Versionen Ihrer Edelsteine ​​in einer Datei speichern, um sie anzuzeigen:

gem list > all_gems.txt

und Sie können sehen, welche Versionen Ihre Rails-App verwendet:

bundle show > project_gems.txt

Mit einem Editor wie Vim können Sie vimdiff problemlos verwenden, um die Änderungen anzuzeigen

37
SnapShot

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

bundle show [gemname]
37
Stina

Es gibt wahrscheinlich einen direkteren Weg, um dies herauszufinden, aber wenn Sie eine Konsole laden und eine bestimmte Version benötigen, wie z.

gem 'RedCloth', '3.0.4'

Sie erfahren, welche Version bereits aktiviert ist:

=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
5
gtd

Es gibt auch eine Liste in Gemfile.lock, die sich im Stammverzeichnis Ihrer App befindet. 

Aus diesem Grund lasse ich Gemfile.lock aus meinem .gitignore. Dies hat mich mehr als einmal gespart, als ich vergessen hatte, die Edelsteinversion in GemFile anzugeben, und ein Edelstein wurde mit brechenden Änderungen aktualisiert.

5
SooDesuNe

Im Terminal

bundle show [gem-name]
bundle show | grep [gem-name]

oder

gem list | grep [gem-name]

[Edelsteinname] sollte als Edelsteinname ersetzt werden, nach dem Sie suchen möchten.

4
Danila Pavilov

Versuchen Sie es mit script/about. Ihr config/environment.rb enthält auch Informationen darüber.

In Ihrem config/environment.rb können Sie angeben, welche Version einer bestimmten gem die Anwendung verwenden soll. Wenn Sie jedoch mehrere Versionen einer gem auf Ihrem Computer installiert haben und die Version nicht angeben, wird die neueste Version dieses Gems von der Anwendung verwendet.

4
Waseem
gem list <gemname>

Es werden alle übereinstimmenden Edelsteine ​​angezeigt, wenn dies z 

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

script/about sagt Ihnen, welche Versionen der Core-Rails und Rack-Gems Sie verwenden, aber nichts anderes. Wenn Sie in config/environment.rb suchen, sollte es einen Abschnitt geben, der folgendermaßen 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 dort alle erforderlichen Edelsteine ​​und Versionen hinzugefügt. Die Versionen sind jedoch optional in dieser Datei, und nichts hindert schließlich einen unerfahrenen Entwickler daran, einen require 'rubygems'; require 'some_random_thing' oben auf eine Datei zu schlagen.

Wenn Sie sehen, dass ein Edelstein erforderlich ist, aber keine Version angegeben wurde, können Sie gem list eingeben, um alle Versionen aller Edelsteine ​​im System anzuzeigen. Standardmäßig wird der aktuellste verwendet.

2
John Hyland
bundle exec gem which gem_name

Ist wahrscheinlich was Sie verwenden können:

$› bundle exec gem which Rails
/Users/xxxx/.rvm/gems/[email protected]/gems/railties-4.1.7/lib/Rails.rb
1
JAR.JAR.beans

bundle show gemname .e. für devise musst du gerne schreiben

bundle show devise

und es wird die aktuelle Edelsteinversion ausgedruckt.

0
Bilal A.Awan

versuchen Sie es mit einem lokalen Juwel:

gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

Wenn Sie Bundle verwenden:

bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
0
Sunil shakya