2010-11-09 13 views
11

Ich muss etwas vermissen, denn letzte Nacht war ich erstaunt zu finden, dass googeln für check gem dependencies und ähnliches die Antwort dafür nicht enthüllt.Wie überprüfe ich, ob alle Abhängigkeiten meiner installierten Ruby-Edelsteine ​​erfüllt sind?

Ich bin im Grunde nach einem ungefähren Äquivalent von rpm -V - ein Befehl, der durch einige oder alle meine installierten Edelsteine ​​gehen wird und stellen Sie sicher, dass ihre Abhängigkeiten ebenfalls installiert sind. Seit gem install installiert standardmäßig alle abhängigen Edelsteine, normalerweise ist dies nicht notwendig; Wenn Sie jedoch einen Edelstein und sagen Sie ihm, mit der Deinstallation fortzufahren, obwohl andere Edelsteine ​​von demjenigen abhängen, der deinstalliert wird, dann werden Sie natürlich mit gebrochenen Abhängigkeiten enden. Die Frage ist, wie listet man dann diese kaputten Abhängigkeiten auf, ohne irgendwelche Edelsteine ​​zu installieren/deinstallieren/zu aktualisieren?

N.B. Antworten, die Bundler beinhalten, nützen mir wenig, da ich aus verschiedenen Gründen immer noch an Rails 2.x festhalte.

Antwort

5

Ich weiß, Sie sagten, Sie in Antworten zu Bündler nicht interessiert waren, aber ...

Bündler wird für Sie gem Auflösung von Abhängigkeiten handhaben und ist kompatibel mit Rails 2.3. Ich habe Bundler mit einer Reihe von Rails 2 Apps verwendet und hatte keine Probleme damit.

Es gibt Anweisungen für Bündler Installation on Rails 2.3 hier: http://gembundler.com/rails23.html

+1

Danke - gut zu wissen. Aber angenommen, ich hätte Bundler installiert, wie würde ich eine Abhängigkeitsprüfung für alle meine installierten Edelsteine ​​durchführen? Muss ich eine Dummy Gemfile erstellen, die alle enthält, und dann 'bundle check' oder ähnliches ausführen? –

+0

Ich bin kein Vorschlag mit einem Dummy-Gemfile, sondern ganz auf Bundler. Auf diese Weise lösen Sie nicht nur Ihr aktuelles Problem, sondern vermeiden auch, dass dies in Zukunft geschieht. – georgebrock

+0

Danke - Ich habe Bundler angeschaut und ich denke du hast Recht. Es ist eine Schande, dass 'gem' nicht die Suche nach defekten Abhängigkeiten unterstützt, aber das Ändern meines Workflows zu Bundler bedeutet, dass ich mich nicht mehr um unterbrochene Abhängigkeiten kümmern sollte, da 'bundle install' alle fraglichen Abhängigkeiten sicherstellt * im Kontext eines bestimmten Projekts * sind festgelegt. –

3

Haben Sie versucht, gem update läuft? Dadurch werden alle Abhängigkeitstests für alle deine Edelsteine ​​ausgeführt. Sie können dies zur Installation in einem separaten Verzeichnis ausführen.

[Bearbeiten] Auch, was, wenn Sie gem check laufen passiert? gem dependency listet alle Edelsteinabhängigkeiten auf. Ich bin mir ziemlich sicher, dass Sie die Ausgabe an einen Befehl wie check weiterleiten können, um zu sehen, ob diese Edelsteine ​​installiert sind, wenn es Ihnen nicht sagt, ob etwas installiert ist. [/ edit]

+0

Danke, aber das hätte auch den unerwünschten Nebeneffekt der Änderung von Edelstein-Versionen, die möglicherweise meine Rails App brechen würde. Ich war speziell nach einem Read-Only-Check der lokalen Edelsteine ​​- ich werde die ursprüngliche Frage aktualisieren, um dies zu verdeutlichen. –

+0

wahr.Sie können dies jedoch ausführen, damit die Updates nicht in Ihrem Edelsteinordner installiert werden. Sie könnten auch versuchen, 'Gem veraltet'. – philosodad

+0

'gem check' gibt nichts aus, aber es erhebt keinen Anspruch auf Abhängigkeiten zu prüfen. Ebenso meldet 'edel veraltet' lediglich, welche Edelsteine ​​neuere Versionen haben, wobei Abhängigkeiten ignoriert werden. –

16

in der Bash-Shell:

gem list --no-version > list 
gem dependency --pipe > depends 
grep -v -f list depends > failed.txt 
rm list 
rm depends 

failed.txt haben nun eine Liste aller Abhängigkeiten, die nicht installiert sind.

+0

Danke, das ist sehr nützlich! Obwohl ich denke, dass es immer noch einige unbefriedigte Abhängigkeiten vermisst, z. Wenn Edelstein A von Version x von Edelstein B abhängt, aber nur Version y von Edelstein B installiert ist, wird nicht angezeigt, dass die Abhängigkeit von Edelstein A nicht erfüllt ist, da nur geprüft wird, ob Edelstein B installiert ist. –

+0

Wenn die Antwort nützlich ist, könnten Sie erwägen, sie zu wählen. Die Funktion, nach der Sie suchen, wurde früher als 'Gem Lock' bezeichnet, aber der 'lock'-Befehl wurde nicht weiter unterstützt und die rubygem-Gruppe empfiehlt Bundler. Meine alte Version von Edelsteinen hat immer noch den 'lock'-Befehl, du kannst sehen, ob es auch dein tut. – philosodad

+3

Ich würde es abstimmen, wenn StackOverflow mich lassen würde :-(Es erfordert 15 Reputation, was lächerlich erscheint, wenn man bedenkt, dass es meine eigene Frage ist. –

1

Ich stimme definitiv Bundler für Anwendungen zu wechseln. Wenn Sie sich explizit nach einer Möglichkeit umschauen, um nicht zufriedengestellte Edelsteinabhängigkeiten für installierte Edelsteine ​​auf einem System schnell zu identifizieren (so wie ich), dann könnten Sie dieses Skript ausprobieren.

https://gist.github.com/1124953