estoy usando un sistema de amplia Rubí instalar en mi servidor, y tratando de desplegar en un gemset RVM (como el uso RVM [email protected]_name)Capistrano implementación en todo el sistema rubíes RVM no ver instalados
Cuando Ejecutar mi archivo Cap, Cap pukes y dice que Ruby no está instalado.
Sin embargo,, en realidad, que Ruby está instalado. (El usuario que realiza la implementación es parte del grupo rvm y puede rvm use
manualmente en la línea de comandos.)
¿Qué podría estar haciendo mal?
partes pertinentes de Capfile
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "bundler/capistrano"
require "rvm/capistrano"
require "erb"
set(:rvm_type) { :system }
set(:ruby_version) { '1.9.2' }
set(:rvm_ruby_string) { "#{ruby_version}@#{application}" }
set(:rvm_path) { "/usr/local/rvm" }
#set(:rvm_bin_path) { "#{rvm_path}/bin" }
before "deploy:setup", "rvm:debug_gemset"
before "deploy:setup", "bundle:install_gem"
namespace :rvm do
desc "Creates gemset for application"
task :debug_gemset do
disable_rvm_shell do
run "/usr/local/rvm/bin/rvm list rubies" do |ch, stream, data|
if stream == :err
logger.debug "capured output on STDERR: #{data}"
else # stream == :out
logger.debug "capured output on STDOUT: #{data}"
end
end
end
end
end
# We need this so that we can install rvm first!
def disable_rvm_shell(&block)
default_shell = self[:default_shell]
self[:default_shell] = nil
yield
self[:default_shell] = default_shell
end
salida Cap
* executing `deploy:setup'
triggering before callbacks for `deploy:setup'
* executing `rvm:debug_gemset'
* executing "/usr/local/rvm/bin/rvm list rubies" # <----- ran outside of rvm-shell
servers: ["XX.XXX.XXX.XXX"]
Password:
[XX.XXX.XXX.XXX] executing command
* capured output on STDOUT:
* capured output on STDOUT: rvm rubies
* capured output on STDOUT:
* ruby-1.8.7-p352 [ x86_64 ]
* capured output on STDOUT:
* ree-1.8.7-2011.03 [ x86_64 ]
* capured output on STDOUT:
* ruby-1.9.2-p290 [ x86_64 ]
*
Ok, impresionante: 1.9.2 está instalado. (Esto es de esperar - He instalado 1.8.7, 1.9.2 y REE manualmente!)
Pero eso no es todo Capistrano dice ...
command finished
* executing `bundle:install_gem'
* executing "gem install bundler"
servers: ["XX.XXX.XXX.XXX"]
[XX.XXX.XXX.XXX] executing command
** [out ::XX.XXX.XXX.XXX] WARN: ruby ruby-1.9.2-p290 is not installed.
Esa última línea afirma que no 1.9.2 instalado? !!
** [out ::XX.XXX.XXX.XXX] To install do: 'rvm install ruby-1.9.2-p290'
*** [err ::XX.XXX.XXX.XXX] ERROR: Gemset 'MY_APP' does not exist, rvm gemset create 'MY_APP' first.
*** [err ::XX.XXX.XXX.XXX] Error: RVM was unable to use '[email protected]_APP'
command finished
failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell '[email protected]_APP' -c 'gem install bundler'" on XX.XXX.XXX.XXX
Depuración con carcasa de la tapa
Jim Gay pregunta: "¿qué pasa con la depuración con carcasa de la tapa?"
rvm/capinstrano
ejecuta comandos a través de rvm-shell
, que de inmediato busca la versión y gemset esencialmente antes de que se pueda ejecutar el comando. (Así, el disable_rvm_shell
definido anteriormente que se utilizó para hacer el inicial rvm list rubies
Por ejemplo:.?
cap> which rvm
[establishing connection(s) to XX.XXX.XXX.XX]
Password:
** [out :: XX.XXX.XXX.XX] WARN: ruby ruby-1.9.2-p290 is not installed.
** [out :: XX.XXX.XXX.XX] To install do: 'rvm install ruby-1.9.2-p290'
*** [err :: XX.XXX.XXX.XX] ERROR: Gemset 'MY_APP' does not exist, rvm gemset create 'MY_APP' first.
*** [err :: XX.XXX.XXX.XX] Error: RVM was unable to use '[email protected]_APP'
error: failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell '[email protected]_APP' -c 'which rvm'" on XX.XXX.XXX.XX
Conclusión
obviamente estoy haciendo algo mal, pero lo que
Ajuste 1.9.2 ser el predeterminado Ruby no es una opción, ya que también voy a alojar una aplicación 1.8.7 en este cuadro (idealmente). Es por eso que estoy usando RVM en el nivel del sistema para empezar).
También me aseguré de que el usuario de implementación esté en el grupo RVM, según la documentación de RVM.
Para futuros Googlers: explico exactamente cuál es el problema, y cómo solucionarlo, en una publicación de blog (gracias a la respuesta a continuación): http://blog.wilcoxd.com/blog/2011/08/05/ capistrano-system-wide-rvm-and-creating-gemsets-as-part-of-deploysetup/ – RyanWilcox