2016-04-29 7 views
1

Ich bin neu in Ruby, und versuche, einen Git-Haken in Ruby zu schreiben. Ich möchte das robuste Juwel in meinem Skript verwenden. Der Edelstein ist bereits im Rahmen der Installation von GitLab unter /opt/gitlab/embedded/service/gem/ruby/2.1.0/ verfügbar (Files List). Wie kann ich dieses Juwel in meinem Skript anfordern?Wie benötige ich Ruby Gem von einem bestimmten Ort?

Ich habe versucht $LOAD_PATH.unshift "/opt/gitlab/embedded/service/gem/ruby/2.1.0/" und dann require "rugged", wie in another stackoverflow answer erwähnt, aber es hat nicht funktioniert.

+0

Verwenden Sie [Bundler] (http://bundler.io)? Normalerweise erledigt es dieses Zeug für dich. – tadman

+0

Ich benutze Bündler für andere erforderliche Edelsteine. Die Installation des 'rugged' Gems erfordert jedoch die Installation von' gcc' und 'cmake'. Also wollte ich es von dem vorhandenen Installationsort laden. –

+0

Wenn es Erweiterungen kompiliert hat, müssen Sie es auf diesem Computer kompilieren. Es ist sehr riskant, Binärdateien auf beliebige Maschinen zu werfen, sie sind oft an bestimmte Versionen von Systembibliotheken gebunden. "Gcc" und so weiter zu bekommen sollte nicht schwer sein, oder? Wenn Sie den Ladepfad manipulieren, müssen Sie das übergeordnete Verzeichnis dieses Edelsteins einbeziehen, nicht nur, wo sich alle Edelsteine ​​befinden. – tadman

Antwort

1

Schauen Sie genau, wie $LOAD_PATH für jede gem konfiguriert ist, nachdem Sie es enthalten. Normalerweise ist es der vollständige Pfad, wo die Basis gemname.rb liegt, wie in Ihrem Fall, wo rugged.rb ist.

Die Art und Weise, wie die $LOAD_PATH funktioniert, scannt diese Liste auf der Suche nach rugged.rb und wenn es nicht gefunden wird, geht es weiter zum nächsten möglichen Ort. Du gibst ein Verzeichnis an, das das nicht hat, also finde den richtigen Pfad und fülle ihn aus, und du solltest gut sein.

+0

Danke. Ich habe "$ LOAD_PATH.unshift" /opt/gitlab/embedded/service/gem/ruby/2.1.0/gems/rugged-0.24.0/lib/ "' verwendet und es hat funktioniert. –

+1

Das ist in etwa, aber denken Sie daran, das ist in der Regel viel unordentlicher als mit Bundler. Es kam mir gerade in den Sinn, dass Sie eine Möglichkeit haben könnten, dies sauberer mit der Option Bundler ': path' zu tun:' gem 'rugged', Pfad: '/opt/gitlab/embedded/service/gem/ruby/2.1.0/edelsteine ​​/ rugged-0.24.0/''Leider macht das deine' Gemfile 'an eine bestimmte Maschine gebunden, was normalerweise eine schlechte Sache ist. – tadman

+0

Vielen Dank @tadman. Ich werde das auch versuchen. –

Verwandte Themen