
Se me asignó la tarea de volver a poner en línea una instancia de chiliproject. Se ejecuta en un servidor CentOS 6 (64 bits). El problema es que no conozco absolutamente nada de Ruby y mi conocimiento de Linux no es mucho más avanzado que eso; No tengo absolutamente ninguna idea de por dónde empezar.
Cuando cargo la página en un navegador, se escribe lo siguiente en /var/log/nginx/redmine-proxy-error
:
2014/01/13 11:52:06 [crit] 1865#0: *675 connect() to unix:/var/run/redmine/sockets/thin.3.sock failed (2: No such file or directory) while connecting to upstream, client: IPADDRESSHERE, server: REDACTED.com.br, request: "GET / HTTP/1.1", upstream: "http://unix:/var/run/redmine/sockets/thin.3.sock:/", host: "REDACTED.com.br"
2014/01/13 11:52:06 [crit] 1865#0: *675 connect() to unix:/var/run/redmine/sockets/thin.0.sock failed (2: No such file or directory) while connecting to upstream, client: IPADDRESSHERE, server: REDACTED.com.br, request: "GET / HTTP/1.1", upstream: "http://unix:/var/run/redmine/sockets/thin.0.sock:/", host: "REDACTED.com.br"
2014/01/13 11:52:06 [crit] 1865#0: *675 connect() to unix:/var/run/redmine/sockets/thin.1.sock failed (2: No such file or directory) while connecting to upstream, client: IPADDRESSHERE, server: REDACTED.com.br, request: "GET / HTTP/1.1", upstream: "http://unix:/var/run/redmine/sockets/thin.1.sock:/", host: "REDACTED.com.br"
2014/01/13 11:52:06 [crit] 1865#0: *675 connect() to unix:/var/run/redmine/sockets/thin.2.sock failed (2: No such file or directory) while connecting to upstream, client: IPADDRESSHERE, server: REDACTED.com.br, request: "GET / HTTP/1.1", upstream: "http://unix:/var/run/redmine/sockets/thin.2.sock:/", host: "REDACTED.com.br"
Recibí ayuda de #chiliproject en IRC:
thin
es un servidor de aplicaciones que (en su caso) parece tener la tarea de ejecutar el código real de chiliproject. Debe iniciarse por separado desde nginx y luego (de acuerdo con su configuración) debe crear un conector de escucha en /var/run/redmine/sockets/thin.3.sock a donde su nginx reenvía las conexiones. Es posible que ya tenga un script de inicio separado para Thin. De lo contrario, es posible que tengas que iniciarlo usando un script/servidor o el ejecutable delgado dentro de tu directorio chiliproject. Probablemente tenga un archivo de configuración delgado en algún lugar (algo como redmine.yml, por ejemplo, en /etc/thin), debería contener (en forma legible por humanos) algunas configuraciones para delgado, incluida la ubicación del socket, su directorio chiliproject y otras cosas. Puedes empezar delgado corriendothin start -C /etc/thin/redmine.yml
Aquí está mi /etc/thin/redmine.yml
(el único archivo en este directorio):
---
chdir: /srv/www/redmine/chiliproject
environment: production
timeout: 30
log: /var/log/redmine/thin.log
pid: /var/run/redmine/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
servers: 4
socket: /var/run/redmine/sockets/thin.sock
daemonize: true
user: redmine
group: redmine
Y aquí está /etc/rc.d/init.d/thin
:
#!/usr/bin/env sh
### BEGIN INIT INFO
# Provides: thin
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: thin initscript
# Description: thin
### END INIT INFO
# Original author: Forrest Robertson
# Do NOT "set -e"
DAEMON=/usr/local/rvm/gems/ruby-1.9.2-p290/bin/thin
#DAEMON=/usr/local/rvm/bin/bootup_thin
SCRIPT_NAME=/etc/init.d/thin
#CONFIG_PATH=/etc/thin
CONFIG_PATH=/etc/thin/redmine.yml
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
case "$1" in
start)
#$DAEMON start --all $CONFIG_PATH
$DAEMON start -C /etc/thin/redmine.yml
;;
stop)
$DAEMON stop --all $CONFIG_PATH
;;
restart)
$DAEMON restart --all $CONFIG_PATH
;;
*)
echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
exit 3
;;
esac
:
No hay ningún /usr/local/rvm/bin/bootup_thin
archivo.
Reinicio la máquina y la ejecuto, ps aux | grep thin
no me muestra nada (aparte del propio grep).
Si ejecuto, start -C /etc/thin/redmine.yml
obtengo una salida de texto en la pantalla y comienzos finos y puedo navegar por el sitio. Si reinicio la máquina, el servicio no se cargará correctamente, a pesar del init.d
archivo. Este archivo se está ejecutando porque he colocado una touch /var/log/test
línea en la start)
cláusula y se crea el archivo. También lo agregué > /var/log/thin_output
al final de la línea de inicio, pero crea un archivo vacío y los thin
registros no muestran que se haya iniciado.
Incluir start -C /etc/thin/redmine.yml
al final de /etc/rc.local
tampoco tiene ningún efecto.
La salida de type thin
es
delgado es /usr/local/rvm/gems/ruby-1.9.2-p290/bin/thin
Si escribo, /etc/init.d/thin start
comenzará con una salida normal:
Starting server on /var/run/redmine/sockets/thin.0.sock ...
Starting server on /var/run/redmine/sockets/thin.1.sock ...
Starting server on /var/run/redmine/sockets/thin.2.sock ...
Starting server on /var/run/redmine/sockets/thin.3.sock ...
Me pidieron en el chat que pegara el resultado de find -L /etc/ -samefile /etc/init.d/thin
, es:
/etc/rc2.d/K50thin /etc/rc0.d/K50thin /etc/rc5.d/K50thin /etc/init.d/thin /etc/rc.d/rc2.d/K50thin /etc/rc.d/rc0.d/K50thin /etc/rc.d/rc5.d/K50thin /etc/rc.d/init.d/thin /etc/rc.d/rc3.d/K50thin /etc/rc.d/rc1.d/K50thin /etc/rc.d/rc4.d/K50thin /etc/rc.d/rc6.d/K50thin /etc/rc3.d/K50thin /etc/rc1.d/K50thin /etc/rc4.d/K50thin /etc/rc6.d/K50thin
Realicé sudo chkconfig thin on
lo sugerido en una respuesta aquí, y chkconfig -l thin
los resultados
delgado 0: apagado 1: apagado 2: encendido 3: encendido 4: encendido 5: encendido 6: apagado
y la salida de find -L /etc/ -samefile /etc/init.d/thin
cambios a /etc/rc2.d/S50thin /etc/rc0.d/K50thin /etc/rc5.d/S50thin /etc/init.d/thin /etc/rc.d/rc2.d/S50thin /etc/rc.d/rc0.d/K50thin /etc/rc.d/rc5.d/S50thin /etc/rc.d/init.d/thin /etc/rc.d/rc3.d/S50thin /etc/rc.d/rc1.d/K50thin /etc/rc.d/rc4.d/S50thin /etc/rc.d/rc6.d/K50thin /etc/rc3.d/S50thin /etc/rc1.d/K50thin /etc/rc4.d/S50thin /etc/rc6.d/K50thin
; pero cuando reinicio, Thin todavía no se ejecuta.
Alguien me sugirió comparar las variables de entorno en diferentes niveles de ejecución, así que incluí printenv > /var/log/printenv.log
una línea de /etc/rc.d/init.d/thin
y la comparé con la salida de printenv
en la CLI. Aquí están los resultados:
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
RUNLEVEL=3
runlevel=3
PWD=/
LANGSH_SOURCED=1
LANG=pt_BR.UTF-8
PREVLEVEL=N
previous=N
CONSOLETYPE=vt
SHLVL=2
UPSTART_INSTANCE=
UPSTART_EVENTS=runlevel
UPSTART_JOB=rc
_=/usr/bin/printenv
y
rvm_bin_path=/usr/local/rvm/bin
HOSTNAME=redacted.com.br
GEM_HOME=/usr/local/rvm/gems/ruby-1.9.2-p290
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
IRBRC=/usr/local/rvm/rubies/ruby-1.9.2-p290/.irbrc
SSH_CLIENT=REDACTED
OLDPWD=/etc
MY_RUBY_HOME=/usr/local/rvm/rubies/ruby-1.9.2-p290
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
__array_start=0
rvm_path=/usr/local/rvm
escape_flag=1
rvm_prefix=/usr/local
MAIL=/var/spool/mail/root
PATH=/usr/local/rvm/gems/ruby-1.9.2-p290/bin:/usr/local/rvm/gems/ruby-1.9.2-p290@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p290/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
PWD=/
XMODIFIERS=@im=ibus
LANG=pt_BR.utf8
_second=1
HISTCONTROL=ignoredups
rvm_version=1.16.17 (stable)
SHLVL=1
HOME=/root
_first=0
LOGNAME=root
CVS_RSH=ssh
GEM_PATH=/usr/local/rvm/gems/ruby-1.9.2-p290:/usr/local/rvm/gems/ruby-1.9.2-p290@global
SSH_CONNECTION=REDACTED
LESSOPEN=|/usr/bin/lesspipe.sh %s
RUBY_VERSION=ruby-1.9.2-p290
G_BROKEN_FILENAMES=1
_=/usr/bin/printenv
Respuesta1
Las variables de su entorno parecen indicar que su servidor está utilizando elAdministrador de versiones de Ruby:
Ruby Version Manager, a menudo abreviado como RVM, es una plataforma de software similar a Unix diseñada para administrar múltiples instalaciones de Ruby en el mismo dispositivo.
Todo el entorno Ruby, incluido el intérprete Ruby, los RubyGems instalados y la documentación, está particionado. Luego, se pueden cambiar las diferentes versiones para permitir que un desarrollador trabaje en varios proyectos con diferentes requisitos de versión.
Aparentemente, RVM no está incluido en su entorno de arranque. Puedes solucionarlo fácilmente reinstalando el servicio nuevamente:
Primero, actualice su RVM a la última versión
rvm se estabiliza
Luego, realiza estos pasos.
crear entrada init.d para delgada
sudo thin install
configurar algunos valores predeterminados
sudo /usr/sbin/update-rc.d -f thin defaults
generar configuración de arranque para su aplicación Rails
sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production
generar script contenedor rvm
rvm wrapper <rubyversion>@<gemset> bootup thin
Si estás usando un conjunto de gemas global, puedes usar
rvm wrapper ruby-1.9.2-p125 bootup thin
editar inicio fino
sudo nano /etc/init.d/thin
cambiar el cargador original
DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
para apuntar al contenedor rvm en su lugar
DAEMON=/usr/local/bin/bootup_thin
ponerlo en marcha
sudo /etc/init.d/thin start
Ahora debería comenzar cuando su sistema se inicie.