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:
¿Por qué el bundler solo está visible cuando ejecuto
sudo gem list
?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