.png)
Instalé RVM usando 'user01' en Ubuntu 14.04 y user01 puede iniciar mi aplicación Rails como se esperaba. Yo, sin embargo, quiero iniciar esta aplicación después del inicio del sistema. Estoy intentando utilizar lo siguiente para lograr esto:
/var/script/start.sh
screen -d -m mongrel_rails start -e production -p 8088
/etc/rc.local(agregado antes de la salida 0)
sh './var/script/start.sh'
Usando los cambios anteriores, mi aplicación Rails no se inicia. Puedo confirmar esto porque no hay ninguna sesión de pantalla GNU activa (el comando screen -d -m mongrel_rails... inicia una sesión de pantalla y se desconecta. Debería poder ver la sesión con el comando "screen -ls", pero no lo hagas, incluso después de cambiar a root).
Cambié a root (sudo su) e intenté iniciar manualmente la aplicación pero falló con lo siguiente:
/usr/bin/env: ruby: No existe tal archivo o directorio
Supuse que RVM/Ruby no funciona para root. Confirmé esto ejecutando 'ruby -v' que devolvió un mensaje confirmando que la aplicación no estaba instalada. Este no es el caso del usuario01 que ve información sobre la versión de Ruby instalada.
Continué buscando una manera de solucionar esto y encontréesta publicacióneso sugirió el siguiente comando para cambiar al usuario mientras se ejecuta el comando de inicio.
su user01 -c '/var/script/start.sh'
Esto tampoco ayudó y después de investigar, descubrí que Ruby estaba roto para el usuario01 cuando ingresé a esta cuenta desde la raíz. 'ruby -v' tampoco pudo devolver la información esperada. Después de realizar pruebas manualmente, descubrí que escribir 'salir' me devolvió a la raíz, y otra 'salida' me devolvió al usuario01 (la cuenta que usé para iniciar sesión) y Ruby funciona correctamente para esta cuenta.
¿Alguien puede sugerir una forma de solucionar esto?
Respuesta1
estas usandorvm, por lo que la forma correcta de lidiar con el hecho de que Ruby no se encuentre esusar un contenedor rvm(en SysVinit y sistemas advenedizos).
Primero (opcional) cree un alias para su aplicación en el conjunto de gemas que desea usar:
rvm alias create my_app ruby-2.1.4@my_gemset
Luego cree los contenedores que desee:
rvm wrapper my_app mongrel_rails
El contenedor se crea en el $rvm_path/wrappers/my_app
directorio y luego lo llama desde su script de inicio después de cambiar de usuario.
su user01 -c '/home/user01/.rvm/wrappers/my_app/mongrel_rails -e production -p 8088'
(Tenga en cuenta que lo he eliminado por completo screen
, ya que hay pocas buenas razones para ejecutarlo dentro de una pantalla).
Respuesta2
Si '/var/script/start.sh' funciona cuando lo ejecuta iniciando sesión como usuario01, entonces su secuencia de comandos depende de las variables de entorno. Para ver esas variables ejecute 'env'. Quizás falte algo cuando intentas ejecutarlo desde la cuenta raíz a través de 'su user01 -c'.
Lo que sugeriría es intentar usar una opción especial '-' con su. Desde la página de manual:
-, -l, --login
make the shell a login shell, clears all envvars except
for TERM, initializes HOME, SHELL, USER, LOGNAME and PATH
Entonces tu comando se vería así:
# su - user01 -c '/var/script/start.sh'
De esta manera, user01 convertirá el shell en un shell de inicio de sesión, borrará los envvars e inicializará todo lo demás como dice la página del manual.