
我的任務是將 chiliproject 實例重新上線。它在 CentOS 6(64 位元)伺服器上運行。問題是,我對 Ruby 的了解絕對是零,而我的 Linux 知識也不比這高級多少;我完全不知道從哪裡開始。
當我在瀏覽器上加載頁面時,以下內容將被寫入/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"
我從 IRC 上的 #chiliproject 得到了一些幫助:
thin
是一個應用程式伺服器(在您的情況下)似乎負責運行實際的 chiliproject 程式碼。它必須與 nginx 分開啟動,然後(根據您的配置)在 /var/run/redmine/sockets/thin.3.sock 處建立一個監聽套接字,您的 nginx 將連線轉送到該套接字。您可能已經有一個單獨的 Thin 初始化腳本。否則,您可能必須使用 script/server 或 chiliproject 目錄中的瘦可執行檔來啟動它。您可能在某處有一個Thin 配置文件(類似於redmine.yml,例如在/etc/thin 中),它應該包含(以人類可讀的形式)一些Thin 的配置設置,包括套接字位置、您的chiliproject 目錄和其他內容。你可以從跑步開始瘦身thin start -C /etc/thin/redmine.yml
這是我的/etc/thin/redmine.yml
(該目錄上的唯一文件):
---
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
這是/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
:
沒有/usr/local/rvm/bin/bootup_thin
文件。
我重新啟動機器並運行ps aux | grep thin
它,沒有顯示任何內容(除了 grep 本身)。
如果我執行,start -C /etc/thin/redmine.yml
我會在螢幕上得到文字輸出並開始細化,我可以瀏覽該網站。如果我重新啟動計算機,儘管有文件,但服務將無法正確加載init.d
。該文件正在執行,因為我touch /var/log/test
在start)
子句上放置了一行並建立了該文件。我還附加> /var/log/thin_output
到了起始行的末尾,但它創建了一個空文件,並且thin
日誌沒有顯示它正在啟動。
包括start -C /etc/thin/redmine.yml
在最後/etc/rc.local
也沒有效果。
的輸出type thin
是
薄是 /usr/local/rvm/gems/ruby-1.9.2-p290/bin/thin
如果我輸入,/etc/init.d/thin start
它將以正常輸出開始:
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 ...
我在聊天中被要求貼上 的輸出find -L /etc/ -samefile /etc/init.d/thin
,它是:
/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
按照此處答案中的建議執行操作,並chkconfig -l thin
輸出
薄 0:關 1:關 2:開 3:開 4:開 5:開 6:關
並將輸出find -L /etc/ -samefile /etc/init.d/thin
更改為/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
;但當我重新啟動時,thin 仍然沒有運行。
有人建議我比較不同運行等級上的環境變量,因此我將其包含printenv > /var/log/printenv.log
在一行中並將其與CLI 上/etc/rc.d/init.d/thin
的輸出進行比較。printenv
結果如下:
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
和
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
答案1
您的環境變數似乎表明您的伺服器正在使用Ruby 版本管理器:
Ruby Version Manager(通常縮寫為 RVM)是一個類 UNIX 軟體平台,旨在管理同一裝置上的多個 Ruby 安裝。
整個 Ruby 環境(包括 Ruby 解釋器、已安裝的 RubyGems 和文件)均已分割。然後可以在不同版本之間切換,以使開發人員能夠處理具有不同版本要求的多個專案。
顯然 RVM 不包含在您的開機環境中。重新安裝服務即可輕鬆解決:
首先,將您的 RVM 更新至最新版本
RVM 穩定
然後,執行這些步驟
為 Thin 建立 init.d 條目
sudo thin install
設定一些預設值
sudo /usr/sbin/update-rc.d -f thin defaults
為您的 Rails 應用程式產生啟動配置
sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production
產生rvm包裝腳本
rvm wrapper <rubyversion>@<gemset> bootup thin
如果您使用的是全局寶石集,則可以使用
rvm wrapper ruby-1.9.2-p125 bootup thin
編輯精簡初始化
sudo nano /etc/init.d/thin
改原來的loader
DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
改為指向 rvm 包裝器
DAEMON=/usr/local/bin/bootup_thin
啟動它
sudo /etc/init.d/thin start
現在它應該在系統啟動時啟動。