2011-05-03 17 views
7

Después de intentar durante horas (y también probar God and Bluepill) decidí hacer mi pregunta aquí porque no tengo ni idea de cómo resolver este problema.Monit + RVM + Thin en OSX/Linux

Tengo una aplicación Rails. Quiero usar Thin como mi servidor de aplicaciones. Quiero usar Monit para monitorear mis instancias Thin. Uso RVM para administrar mis versiones de Ruby como mi usuario local.

Tengo el siguiente archivo de Monit configurar assumably que hacer lo que yo quiero que haga, pero no:

check process thin-81 
    with pidfile /Users/Michael/Desktop/myapp/tmp/pids/thin.81.pid 

    start program = "/Users/Michael/.rvm/gems/ruby-1.9.2-p180/bin/thin start -c /Users/Michael/Desktop/myapp -e production -p 81 -d -P tmp/pids/thin.81.pid" 
    stop program = "/Users/Michael/.rvm/gems/ruby-1.9.2-p180/bin/thin stop -c /Users/Michael/Desktop/myapp -P tmp/pids/thin.81.pid" 

    if totalmem is greater than 150.0 MB for 2 cycles then restart 

Si simplemente copiar/pegar el start program en la línea de comandos (fuera de Monit) funciona. Lo mismo ocurre con el stop program para luego detener la instancia Thin. Sin embargo, ejecutarlo a través de Monit no parece funcionar.

Correr en -v modo detallado se obtiene la siguiente:

monit: pidfile '/Users/Michael/Desktop/myapp/tmp/pids/thin.81.pid' does not exist 

Lo que me lleva a creer que nunca se inicializa delgada. ¿Funciona Monit como root o algo así? Porque si lo hace, obviamente no tendrá las gemas correctas instaladas, ya que estoy usando RVM y no el "sistema" Ruby. Actualmente estoy en OSX (pero eventualmente implementaré Linux). ¿Alguien sabe cuál es la causa de esto? Y si Monit se ejecuta a través de root, ¿cómo podría hacer que use RVM independientemente? ¿O podría decirle a Monit que ejecute los programas de inicio/detención como Michael:staff (supongo que sería en OSX?)

¡Cualquier ayuda es muy apreciada!

Respuesta

11

monit borra el entorno y no ejecuta un shell para su comando (y mucho menos uno interactivo). Encuentro que tengo que hacer algo como:

como el comando monit start.

+0

Gracias, eso es algo de lo que no tenía conocimiento. :) –

4

Una mejor manera sería usar una envoltura RVM para crear un ejecutable personalizado para thin. Creará las variables de entorno correctas para usar el rubí y las gemas correctos, y luego lanzará thin. Lea más sobre esto usándolo con dios aquí: https://rvm.io/integration/god/. Se debe trabajar con la misma Monit

Para crear el envoltorio: rvm wrapper [email protected] bootup thin

a continuación, cambiar start program y stop program de usar el ejecutable que acaba de crear.

7

otra opción que encontré en el grupo RVM Google es el siguiente:

start program = "/bin/su - myuser -c '/path/to/myscript.rb start' " 

do - usuario ejecuta el shell del usuario como un shell de entrada, por lo que si el shell del usuario es fiesta, hará que ~ /.bash_profile que se ejecute por lo que las variables de entorno deben ser los mismos que justo después de que el usuario se registra en .

necesitamos el camino para su, por lo demás, no lo haría monitrc capaz de encontrar el ejecutable do.

+0

Finalmente conseguí que esto funcione con ejecutar monit como root y usar '/ bin/su - user' ... ¡Gracias! –

+0

Con mucho, la solución más fácil. ¡Gracias! – idrinkpabst

Cuestiones relacionadas