versiones ver rails mac instalar gems all ruby ubuntu rubygems bundler ansible

ruby - mac - ver version de rails



Instala la gema Bundler usando Ansible (4)

Desde Ansible 1.3 siguiente solución nativa es posible:

- 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

Mencione el parámetro user_install ! Además, algunas dependencias instaladas por el bundler podrían necesitar seguir otras dependencias de paquetes:

  • zlib1g-dev

Intento instalar Bundler en mi VPS usando Ansible.

Ya tengo la configuración de rbenv y el rubí global es 2.1.0.

Si hago SSH como root en el servidor y ejecuto el gem install bundler , se instala perfectamente.

He intentado las siguientes tres formas de usar Ansible para instalar la gema Bundler y las tres no producen errores, pero cuando configuro SSH y ejecuto la gem list , Bundler no se ve por ningún lado.

Intento 1:

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

Intento 2:

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

Intento 3:

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

También he intentado el último intento con user_install=yes y también con user_install=no y ninguno hace ninguna diferencia.

¿Alguna idea de cómo puedo conseguir que instale Bundler correctamente a través de Ansible?

He estado trabajando en esto por un tiempo y ahora tengo 1 versión de ruby ​​instalada: 2.1.0 y he encontrado que el directorio shims de rbenv no contiene una corrección para bundle .

¿Debería haber una galga para el bundle allí? Me estoy confundiendo acerca de por qué capistrano no puede encontrar el comando del bundle tal como aparece en la lista cuando ejecuto la sudo gem list pero NO cuando ejecuto la gem list .

root@weepingangel:/usr/local/rbenv/shims# echo $PATH /usr/local/rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games root@weepingangel:/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

¿Algunas ideas?

Entonces, creo que los dos problemas principales que tengo:

  1. ¿Por qué el bundler solo está visible cuando ejecuto sudo gem list ?

  2. Mi despliegue está diciendo:

    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

    y este es mi $PATH :

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

¿Por qué no se puede ubicar el paquete?


El problema es que, al ejecutar el gem install bundler través de ansible, no está inicializando rbenv correctamente, ya que rbenv init se ejecuta en .bashrc o .bash_profile . Entonces, el comando gem usado es el sistema uno, no el que está instalado como rbenv shim. Por lo tanto, cada vez que instale una gema, está instalada en todo el sistema, no en su entorno rbenv.

Para que rbenv se inicialice correctamente, debe ejecutar bash y declarar explícitamente que es un shell de inicio de sesión, por lo que lee sus archivos de inicialización:

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

Deje la parte -u your_rbenv_user si realmente desea hacer esto como root.

Si el comando anterior funciona, puede convertirlo fácilmente en una acción de libro de estrategias:

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

Es engorroso, pero es la única forma que encontré hasta ahora.


Esto funcionó para mí:

- name: rubygems | install bundler shell: gem install bundler - name: rbenv | rehash shell: RBENV_ROOT={{ rbenv_root }} rbenv rehash

Algunas veces después de instalar bundler, con rbenv en el sistema, necesita actualizar su $PATH ejecutando rbenv rehash . Solo intenté lo mismo con ansible, y funcionó. Bundler está disponible en mi $PATH después de la repetición.


Me encontré con el problema de entorno similar cuando traté de ejecutar comandos como otro usuario. Como se menciona en esta solicitud de características , tiene dos opciones para ejecutar su comando en el shell de inicio de sesión (que cargará el entorno del usuario). Por ejemplo, me gustaría instalar bundler como usuario de rieles :

- name: Install Bundler shell: gem install bundler sudo_user: rails -i

o

- name: Install Bundler command: sudo -iu rails gem install bundler