
Ich wurde damit beauftragt, eine Chiliproject-Instanz wieder online zu bringen. Sie läuft auf einem CentOS 6-Server (64 Bit). Das Problem ist, dass ich absolut keine Ahnung von Ruby habe und meine Linux-Kenntnisse auch nicht viel weiter fortgeschritten sind. Ich habe absolut keine Ahnung, wo ich anfangen soll.
Wenn ich die Seite in einem Browser lade, wird Folgendes geschrieben /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"
Ich habe von #chiliproject im IRC etwas Hilfe bekommen:
thin
ist ein App-Server, der (in Ihrem Fall) die Aufgabe zu haben scheint, den eigentlichen Chiliproject-Code auszuführen. Er muss separat von nginx gestartet werden und sollte dann (gemäß Ihrer Konfiguration) einen Listening-Socket unter /var/run/redmine/sockets/thin.3.sock erstellen, an den Ihr nginx Verbindungen weiterleitet. Möglicherweise haben Sie bereits ein separates Init-Skript für Thin. Oder Sie müssen es möglicherweise mit script/server oder der Thin-ausführbaren Datei in Ihrem Chiliproject-Verzeichnis starten. Sie haben wahrscheinlich irgendwo eine Thin-Konfigurationsdatei (so etwas wie redmine.yml, z. B. in /etc/thin), die (in menschenlesbarer Form) einige Konfigurationseinstellungen für Thin enthalten sollte, einschließlich des Socket-Speicherorts, Ihres Chiliproject-Verzeichnisses und anderer Dinge. Sie können Thin starten, indem Sie Folgendes ausführen:thin start -C /etc/thin/redmine.yml
Hier ist meine /etc/thin/redmine.yml
(die einzige Datei in diesem Verzeichnis):
---
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
Und hier ist /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
:
Es ist keine /usr/local/rvm/bin/bootup_thin
Datei vorhanden.
Ich starte die Maschine neu und beim Ausführen ps aux | grep thin
wird mir nichts angezeigt (außer dem grep selbst).
Wenn ich es ausführe, start -C /etc/thin/redmine.yml
erhalte ich eine Textausgabe auf dem Bildschirm und Thin startet und ich kann die Site durchsuchen. Wenn ich den Computer neu starte, wird der Dienst trotz der init.d
Datei nicht richtig geladen. Diese Datei wird ausgeführt, weil ich eine touch /var/log/test
Zeile in die start)
Klausel eingefügt habe und die Datei erstellt wird. Ich habe auch > /var/log/thin_output
an das Ende der Startzeile angehängt, aber es wird eine leere Datei erstellt und die thin
Protokolle zeigen nicht, dass sie gestartet wird.
Auch das Einschließen start -C /etc/thin/redmine.yml
am Ende /etc/rc.local
hat keine Auswirkung.
Die Ausgabe von type thin
ist
thin ist /usr/local/rvm/gems/ruby-1.9.2-p290/bin/thin
Wenn ich es eingebe, /etc/init.d/thin start
beginnt es mit einer normalen Ausgabe:
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 ...
Ich wurde im Chat gebeten, die Ausgabe von einzufügen find -L /etc/ -samefile /etc/init.d/thin
. Sie lautet:
/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
sudo chkconfig thin on
Ich habe es wie in einer Antwort hier vorgeschlagen durchgeführt und chkconfig -l thin
die Ergebnisse
dünn 0:aus 1:aus 2:an 3:an 4:an 5:an 6:aus
und die Ausgabe find -L /etc/ -samefile /etc/init.d/thin
ändert sich zu /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
; aber wenn ich neu starte, läuft Thin immer noch nicht.
Jemand hat mir vorgeschlagen, die Umgebungsvariablen auf verschiedenen Runlevels zu vergleichen. Ich habe also printenv > /var/log/printenv.log
eine Zeile von eingefügt /etc/rc.d/init.d/thin
und sie mit der Ausgabe von printenv
auf der CLI verglichen. Hier sind die Ergebnisse:
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
Und
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
Antwort1
Ihre Umgebungsvariablen scheinen darauf hinzudeuten, dass Ihr Server dieRuby Version Manager:
Ruby Version Manager, oft als RVM abgekürzt, ist eine Unix-ähnliche Softwareplattform zur Verwaltung mehrerer Ruby-Installationen auf demselben Gerät.
Die gesamte Ruby-Umgebung inklusive Ruby-Interpreter, installierten RubyGems und Dokumentation ist partitioniert. Die verschiedenen Versionen können dann umgeschaltet werden, um einem Entwickler die Arbeit an mehreren Projekten mit unterschiedlichen Versionsanforderungen zu ermöglichen.
Offenbar ist RVM nicht in Ihrer Boot-Umgebung enthalten. Sie können das Problem leicht lösen, indem Sie den Dienst erneut installieren:
Aktualisieren Sie zunächst Ihr RVM auf die neueste Version
RVM stabilisieren
Führen Sie dann diese Schritte aus
init.d-Eintrag für Thin erstellen
sudo thin install
Richten Sie einige Standardeinstellungen ein
sudo /usr/sbin/update-rc.d -f thin defaults
Generieren Sie eine Boot-Konfiguration für Ihre Rails-App
sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production
RVM-Wrapper-Skript generieren
rvm wrapper <rubyversion>@<gemset> bootup thin
Wenn Sie ein globales Gemset verwenden, können Sie einfach
rvm wrapper ruby-1.9.2-p125 bootup thin
thin init bearbeiten
sudo nano /etc/init.d/thin
Ändern Sie den ursprünglichen Loader
DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
um stattdessen auf den RVM-Wrapper zu verweisen
DAEMON=/usr/local/bin/bootup_thin
Fang an
sudo /etc/init.d/thin start
Jetzt sollte es beim Hochfahren Ihres Systems starten.