2016-06-05 7 views
0

TL; DR Wie kann ich ein Ruby-Juwel auf Travis für ein nicht-Ruby-Projekt (meistens Python) installieren, so dass ich die ausführbare Datei verwenden kann bietet als Teil des Build-Systems.Installiere ein Juwel, um es als Werkzeug beim Erstellen eines Python-Projekts auf Travis zu verwenden

Ich versuche, ein Ruby-Juwel für den Aufbau einiger Extras in meinem python project, Post-Test und vor der Bereitstellung zu installieren. Insbesondere möchte ich github-changelog-generator verwenden, um das Änderungsprotokoll für mich automatisch zu generieren.

Es scheint, dass ich nicht zu root installieren kann, da die neuen containerisierten Builds auf Travis sudo nicht zulassen.

Ich habe versucht, mit gem install --user-install github_changelog_generator installieren. Zu Beginn gab es nur command not found Fehler beim Ausführen github_changelog_generator.

Versuch export PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" vor dem Ausführen github_changelog_generator Ergebnisse in der folgenden:

/home/travis/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:315:in `to_specs': Could not find 'github_changelog_generator' (>= 0) among 14 total gem(s) (Gem::LoadError) 
Checked in 'GEM_PATH=/home/travis/.rvm/gems/ruby-1.9.3-p551:/home/travis/.rvm/gems/[email protected]', execute `gem env` for more information 
    from /home/travis/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:324:in `to_spec' 
    from /home/travis/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_gem.rb:64:in `gem' 
    from /home/travis/.gem/ruby/1.9.1/bin/github_changelog_generator:22:in `<main>' 
    from /home/travis/.rvm/gems/ruby-1.9.3-p551/bin/ruby_executable_hooks:15:in `eval' 
    from /home/travis/.rvm/gems/ruby-1.9.3-p551/bin/ruby_executable_hooks:15:in `<main>' 

die mir vorschlagen würde es eine Art hat es sich nicht, aber nicht ganz etwas verstehen.

Ich habe keinen Zweifel, das ist offensichtlich für jemanden mit mehr Erfahrung mit Ruby als ich habe.

Der aktuelle travis yaml Schnipsel ist wie folgt:

after_success: 
    - gem install --user-install github_changelog_generator 
    - export PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"  
    - github_changelog_generator -u pyFFTW -p pyFFTW 

Antwort

1

UPDATE:

Ich habe nicht RVM realisieren wurde auf Python-Projekte nicht initialisiert, so dass die Lösung ist RVM-Setup zu lassen die Umwelt, z durch eine Version von Ruby Installation (anstelle von Standard 1.9.3 im Container):

before_install: 
    - rvm get stable --auto-dotfiles 
    - rvm install 2.3.1 

oder, wenn Sie die Standardversion von RVM Rubin wollen:

before_install: 
    - rvm default 

oder, wenn Sie wollen nur RVM installieren, wenn der Build erfolgreich ist (zB erwarten Sie Travis Ausfälle mehr als oft nicht):

after_success: 
    - rvm default 

RVM wird Setup GEM_HOME und GEM_PATH für Sie, so dass wie 012-Befehleund bundler verwenden den richtigen Ruby und die richtigen Pfade.

(vorherige Antwort folgt - immer noch nützlich für das Debuggen)

Wenn Sie Edelsteine ​​installieren, PATH ist nicht die einzige wichtige Variable zu finden und ein Juwel zu laden. Sie müssen auch GEM_HOME und GEM_PATH richtig einstellen.

Im Zweifel, vor dem gem install run gem env, die Ihnen die gesamte aktuelle Edelstein-Umgebung zeigen wird (wo Edelsteine ​​installiert sind, was der PATH ist, etc.). Sie können auch gem list ausführen, um zu überprüfen, ob das Juwel ordnungsgemäß installiert und verfügbar ist. gem contents github_changelog_generator zeigt Ihnen genau, wo die Dateien installiert wurden.

Wenn Sie die Ausgabe einfügen, wird es offensichtlich, was geändert werden muss.

Travis verwendet Bundler auch zum Laden von Edelsteinen, wenn Sie also eine Gemfile haben und dieser Edelstein nicht in der Gemfile ist, kann er in einigen Fällen ignoriert werden.

Noch einmal, aus gem env sollte Hinweise geben, wie die Ruby-Umgebung auf einem Python-Projekt/Container aussieht.

BTW, wie sieht der Rest der Datei .travis.yml aus? Hast du ein language Set? Hast du sudo: false eingestellt?

+0

Ja, 'Sprache: python' und' sudo: false' sind gesetzt. Ich werde mir die anderen Ausgaben ansehen. Vielen Dank! –

+0

Ok, danke für deine Hilfe. Die Lösung bestand darin, das relevante 'rvm' zu aktivieren, was so einfach war wie' rvm default' und dann das Argument '--user-install' zu entfernen. Also: 'rvm default' gefolgt von' gem install github_changelog_generator'. Es wäre großartig, wenn Sie das für Sie ergänzen könnten, um die Vollständigkeit zu überprüfen, und ich werde es als korrekt markieren. –