Ok, recientemente he tenido algo de experiencia con esto. Parece que hay un par de formas en que este problema puede ser resuelto. En primer lugar, puede determinar si, de hecho, la ejecución remota (a través de Capistrano) es lo que está mal en comparación con el propio host. Parece que ha hecho esto con el shell remoto de Capistrano:
$ cap shell
> echo $PATH
Bueno. Apuesto a que cuando inicie sesión en la máquina y 'echo $ PATH' allí, saldrá lo correcto ... lo mismo aquí.
He encontrado dos formas de solucionar esto: una es habilitar la ejecución del entorno en el demonio ssh del host remoto. En teoría, esto funcionaría, pero no quería preguntarle al administrador de sistemas si estaba bien abrirlo. Básicamente, edite los archivos de configuración ssh para configurar 'PermitUserEnvironment' en 'yes' y agregue las configuraciones de entorno requeridas para implementar el archivo ~/.ssh/environment del usuario; sus páginas man específicas del sistema son probablemente mejores que las que intento generalizar .
Opté por lo que parece bastante hackish, y tiene el inconveniente de que es global para todos los hosts a los que les aplica la aplicación (por lo que si sus ubicaciones ruby / gems son diferentes en diferentes hosts, esto no funcionará) - pero: he añadido la configuración default_environment a la secuencia de comandos de configuración/deploy.rb:
set :default_environment, {
'PATH' => "/usr/local/bin:/bin:/usr/bin:/bin:/<ruby-dir>/bin",
'GEM_HOME' => '<ruby-dir>/lib/ruby/gems/1.8',
'GEM_PATH' => '<ruby-dir>lib/ruby/gems/1.8',
'BUNDLE_PATH' => '<ruby-dir>/lib/ruby/gems/1.8/gems'
}
AMMENDED: It isn't so 'hackish' if you consider the following:
- The environment-specific deploy scripts (deploy/foo.rb) can
override the default in deploy.rb
- PermitUserEnvironment hides the configuration deep in the
.ssh directory of the deploy user; :default_environment at
least exposes it in the checked-in sources.
Esto también resuelve el problema de no ser capaz de hacer las tareas del rastrillo remotas, etc., a través de Capistrano. Tenga en cuenta que la joya de Capistrano, al menos la versión que tengo y con mi implementación configurada de la manera "estándar", instalará las gemas en el directorio/shared/bundle , que la aplicación recogerá. El método que describí requiere un subconjunto mínimo de gemas en los directorios del sistema al que hace referencia el entorno predeterminado para que los comandos de Capistrano remotos puedan ejecutar paquetes, rastrillos, etc.
No dijo si estaba usando RVM (mi solución no lo hace); sin embargo, esta solución está muy cerca de una de las soluciones RVM recomendadas. Alternativamente, puede usar la solución 'rvm/capistrano'; busca RVM Capistrano integration en el sitio web de RVM para más detalles.
Esto era muy útil. En mi caso, estaba teniendo un problema similar donde se encontró el paquete, pero Rake no lo estaba, incluso cuando ejecutaba 'bundle exec rake '. Hice una breve modificación en el entorno que se veía así: conjunto: default_environment, { 'PATH' => "/ opt/ruby-ee/bin: $ PATH" } –
Probé estas técnicas y obtuve los mismos errores todavía. otras opciones? – Paul
Vale la pena señalar que ubuntu ahora incluye una salida anticipada en el script .bashrc, por lo que puede no estar cargando su entorno si está agregando variables de ruta hasta el final. Es posible que desee intentar agregar variables de entorno al principio del archivo – Macdiesel