ruby - add user to rvm group
RVM y thin, usuario root vs. local (4)
RVM viene con un práctico generador de envoltura que crea un cargador intermediario para un script init.d. Esto le permite cargar un servicio usando una versión particular de Ruby y gemset. Lo uso así (después de instalar la gema delgada):
1 - crear la entrada init.d para thin
sudo thin install
2 - configurar algunos valores por defecto
sudo /usr/sbin/update-rc.d -f thin defaults
3 - generar la configuración de arranque para su aplicación de rieles
sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production
4 - generar script rvm wrapper
rvm wrapper <rubyversion>@<gemset> bootup thin
5 - Si está utilizando un conjunto de gemas global, solo puede usar
rvm wrapper ruby-1.9.2-p125 bootup thin
6 - editar thin init
sudo nano /etc/init.d/thin
7 - cambiar el cargador original
DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
8 - para señalar el envoltorio rvm en su lugar
DAEMON=/usr/local/bin/bootup_thin
9 - ponlo en marcha
sudo service thin start
Si está ejecutando más de una aplicación, simplemente genere un archivo yml de configuración de arranque para cada una; al arrancar, se analizan todos los archivos yml en / etc / thin /. Más información aquí:
http://wiki.rubyonrails.org/deployment/nginx-thin?rev=1233246014 nb: Esto está vinculado a una revisión, la versión más reciente se ha editado para que esté vacía. Considere mirar el enlace sin el ?rev=...
en la url, la versión actual puede estar de vuelta y potencialmente más actualizada.
HTH
EDICIÓN DE BONIFICACIÓN 2013
Si bien ya no uso RVM en producción, thin sigue siendo mi servidor de producción preferido, y sigo los pasos 1-3 anteriores para comenzar. Pero la configuración predeterminada que genera puede hacer con algunos ajustes, aquí están algunos de los míos:
Establezca el usuario y el grupo que ejecuta thin como:
user: www-data
group: www-data
Elimine la configuración del puerto y cambie a usar sockets (un poco más rápido):
# port: 3000
socket: tmp/sockets/<appname>.sock
Indique a Thin que reinicie las instancias una por una, en lugar de apagarlas todas antes de volver a comenzar (reinicio continuo):
onebyone: true
Dale al servidor una "etiqueta" para ayudar a identificarlos (en ps aux, etc.):
tag: <appname>
Así que estoy tratando de adelgazar para funcionar como un servicio con RVM. Después de una thin install
, actualicé manualmente /etc/init.d/thin
para usar un su - user
cuando ejecutaba el comando config, de modo que thin se ejecutaba como un usuario local, en lugar de root. Hasta aquí todo bien.
Ahora, cuando trato de usar el sudo service thin start
, parece que está intentando usar la versión que no es RVM de Ruby (1.8.7 que se instaló en la caja para comenzar) para ejecutar el comando. Hice una gem install thin
en la versión no RVM, que luego me da un mensaje uninitialized constant Bundler
: Bundler solo se instala en las gemas RVM, no en las gemas del sistema. Parece que no puedo configurar el entorno RVM (aunque mi script de inicio de RVM está en ~ / .bashrc, que luego se incluye en ~ / .bash_profile).
Todo lo que quiero hacer es correr como un servicio usando el entorno RVM, no el entorno del sistema. ¿Es esto posible? ¿Debo rendirme y cometer el pecado final de correr todo como root? Es muy tentador en este punto.
¡Gracias por cualquier ayuda!
Un addendum que, con suerte, ahorrará tiempo: Ubuntu puede hacer cosas divertidas con sudo y variables de entorno. Si el sudo normal no funciona, use rvmsudo (en .rvm / bin):
rvmsudo thin install
rvmsudo update-rc.d -f thin defaults
Una buena práctica podría ser poner la aplicación en servicio en lugar de poder iniciar aplicaciones en diferentes entornos, como una aplicación en ruby 1.8.7 myapp1.8.7 y otra aplicación en ruby 1.9.2 myapp1.9.2
sudo nano /etc/init.d/myapp1.8.7
MANTENER el cargador original
DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
En caso de inicio de caso
$DAEMON -C /etc/thin/$NAME.yml start
y ponlo en marcha
sudo service myapp1.8.7 start
Hace lo mismo con la aplicación myapp1.9.2 y podrá ejecutar muchas aplicaciones de forma independiente en entornos mixtos.
sudo service myapp1.9.2 start
para una instalación independiente, una solución simple, agregué los privilegios de root al usuario para los "requisitos de rvm" y luego eliminé los privilegios usando visudo username nombre ALL = (ALL: ALL) ALL
Es probable que tenga problemas con el acceso de lectura / escritura a / usr / local / rvm
Cambié los permisos para que todos los usuarios pudieran leer / escribir / ejecutar;
como root ''chomod a + xwr / usr / local / rvm /''
Recibirá advertencias de RVM sobre todos los usuarios que tengan acceso de lectura / escritura / ejecución a esta carpeta al actualizar GEMS