it-swarm.com.de

Installieren Sie den Bundler-Gem mit Ansible

Ich versuche, Bundler mit Ansible auf meinem VPS zu installieren.

Ich habe bereits rbenv eingerichtet und der globale Ruby ist 2.1.0.

Wenn ich SSH als root in den Server einführe und gem install bundler ausführe, wird es perfekt installiert.

Ich habe die folgenden drei Möglichkeiten ausprobiert, Ansible zur Installation des Bundler-Gem zu verwenden, und alle drei erzeugen keine Fehler. Wenn ich jedoch SSH in gem list starte, ist Bundler nirgends zu sehen.

Versuch 1:

---
- name: Install Bundler
  Shell: gem install bundler

Versuch 2:

---
- name: Install Bundler
  Shell: gem install bundler

Versuch 3:

---
- name: Install Bundler
  gem: name=bundler
       state=latest

Ich habe auch den letzten Versuch mit user_install=yes und auch mit user_install=no ausprobiert und macht keinen Unterschied.

Irgendwelche Ideen, wie ich Bundler über Ansible richtig installieren kann?

Ich arbeite seit einiger Zeit daran und habe 1 Ruby-Version installiert: 2.1.0. Ich habe festgestellt, dass das Shims-Verzeichnis für Rbenv kein Shim für bundle enthält.

Sollte da ein Shim für bundle sein? Ich bin nur verwirrt, warum capistrano den bundle-Befehl nicht finden kann, da er beim Ausführen von Sudo gem list aufgelistet ist, NICHT aber beim Ausführen von gem list?

[email protected]:/usr/local/rbenv/shims# echo $PATH
/usr/local/rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:/usr/local/rbenv/shims# gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.2.0
  - Ruby VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/rbenv/versions/2.1.0/lib/Ruby/gems/2.1.0
  - Ruby EXECUTABLE: /usr/local/rbenv/versions/2.1.0/bin/Ruby
  - EXECUTABLE DIRECTORY: /usr/local/rbenv/versions/2.1.0/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - RUBYGEMS PLATFORMS:
    - Ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/rbenv/versions/2.1.0/lib/Ruby/gems/2.1.0
     - /root/.gem/Ruby/2.1.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gems.rubyforge.org", "http://gems.github.com"]
     - "gem" => "--no-ri --no-rdoc"
  - REMOTE SOURCES:
     - http://gems.rubyforge.org
     - http://gems.github.com
  - Shell PATH:
     - /usr/local/rbenv/versions/2.1.0/bin
     - /usr/local/rbenv/libexec
     - /usr/local/rbenv/shims
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/sbin
     - /usr/bin
     - /sbin
     - /bin
     - /usr/games

Irgendwelche Ideen?

Ich denke also, die zwei Hauptprobleme, die ich habe:

  1. Warum ist Bundler nur sichtbar, wenn ich Sudo gem list starte?

  2. Mein Einsatz sagt:

    INFO [18d5838c] Running /usr/bin/env bundle install --binstubs  
    /var/Rails_apps/neiltonge/shared/bin --path  
    /var/Rails_apps/neiltonge/shared/bundle --without development test
    --deployment --quiet on 188.226.159.96 DEBUG [18d5838c] Command: cd /var/Rails_apps/neiltonge/releases/20140301205432 && ( PATH=$PATH
    /usr/bin/env bundle install --binstubs
    /var/Rails_apps/neiltonge/shared/bin --path
    /var/Rails_apps/neiltonge/shared/bundle --without development test
    --deployment --quiet ) DEBUG [18d5838c]     /usr/bin/env: bundle: No such file or directory
    

    und das ist mein $PATH:

    /usr/local/rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    

Warum kann kein Bundle gefunden werden?

29
rctneil

Das Problem ist, dass Sie bei der Ausführung von gem install bundler über ansible rbenv nicht ordnungsgemäß initialisieren, da rbenv init in .bashrc oder .bash_profile ausgeführt wird. Der gem-Befehl ist also der Systembefehl, nicht der als Rbenv-Shim installierte. Wenn Sie also einen Edelstein installieren, wird er systemweit und nicht in Ihrer Rbenv-Umgebung installiert.

Um rbenv ordnungsgemäß initialisiert zu haben, müssen Sie bash selbst ausführen und explizit angeben, dass es sich um eine Login-Shell handelt, sodass die Initialisierungsdateien gelesen werden.

ansible your_Host -m command -a 'bash -lc "gem install bundler"' -u your_rbenv_user 

Lassen Sie den -u your_rbenv_user-Teil, wenn Sie dies wirklich als root tun möchten.

Wenn der obige Befehl funktioniert, können Sie ihn leicht in eine Playbook-Aktion umwandeln:

- name: Install Bundler
  become_user: your_rbenv_user
  command: bash -lc "gem install bundler"

Es ist mühsam, aber es ist der einzige Weg, den ich bisher gefunden habe.

46
leucos

Seit Ansible 1.3 ist folgende native Lösung möglich:

- name: requirements for installing gems
  apt:
    name: {{ item }}
  with_items:
    - Ruby
    - Ruby-dev
    - make

- name: install gem with proper $PATH
  gem:
    name: xyz
    user_install: no

Erwähnen Sie den user_install-Parameter! Zusätzlich könnten einige vom bundler installierte Abhängigkeiten die folgenden Paketabhängigkeiten erfordern:

  • zlib1g-dev
12

Ich habe ein ähnliches Umgebungsproblem gefunden, als ich versuchte, Befehle als anderer Benutzer auszuführen. Wie in dieser Feature-Anfrage erwähnt haben Sie zwei Möglichkeiten, Ihren Befehl in der Login-Shell (die die Benutzerumgebung lädt) auszuführen. Zum Beispiel würde ich gerne Bundler als Rails - Benutzer installieren: 

- name: Install Bundler
  Shell: gem install bundler
  Sudo_user: Rails -i

oder

- name: Install Bundler
  command: Sudo -iu Rails gem install bundler
2
Nick7

Dies funktionierte für mich:

- name: rubygems | install bundler
  Shell: gem install bundler

- name: rbenv | rehash
  Shell: RBENV_ROOT={{ rbenv_root }} rbenv rehash

Manchmal müssen Sie nach der Installation von Bundler mit rbenv auf dem System Ihren $PATH durch Ausführen von rbenv rehash aktualisieren. Ich habe gerade das gleiche mit Ansible ausprobiert, und es hat funktioniert. Bundler ist nach der Rehash in meinem $PATH verfügbar.

0
Struki84

Die sauberste und schnellste Möglichkeit, bundler mit Ansible zu installieren, ist folgende:

Installieren Sie einfach rbenv mit der Rolle https://github.com/zzet/ansible-rbenv-role und konfigurieren Sie die Plugins so (offensichtlich müssen mehr Parameter als nur die Plugins konfiguriert werden):

rbenv_plugins:
- { name: 'Ruby-build',
    repo: 'https://github.com/rbenv/Ruby-build.git',
    version: master }
- { name: 'rbenv-default-gems',
    repo: 'https://github.com/rbenv/rbenv-default-gems.git',
    version: master }

Das mitgelieferte Plugin rbenv-default-gems fügt während des Installationsvorgangs der Version von bundler standardmäßig Ruby und im rechten Verzeichnis hinzu.

Stellen Sie dann sicher, dass sich bundler in PATH befindet.

Das ist es.

0
TomDogg