Rails3.2.9アプリケーションに電力を供給するためにApache/Thinをセットアップしようとしています。つまり、ApacheとThinの両方をデーモンとしてセットアップしています。Ruby1.9.3-p286を実行するRVM/gemsetを使用していますが、デーモンはそれを使用したくないようです。代わりに、Ruby1.8.7がインストールされている非RVMシステムを選択します。
私がシンを始めようとすると、これは私が受け取るエラーです:
ubuntu@ip-1-1-1-1:~/www/mydomain/mysite$ /etc/init.d/thin start
/usr/local/rvm/gems/ruby-1.9.3-p286@mysite/gems/eventmachine-1.0.0/lib/rubyeventmachine.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
Aborted (core dumped)
同様に、同じコマンドをsudo
yieldsで使用すると次のようになります。
ubuntu@ip-1-1-1-1:~$ sudo /etc/init.d/thin start
[start] /etc/thin/mysite.yml ...
Starting server on 127.0.0.1:5000 ...
# However, it refuses connections and crashes, evidenced by:
ubuntu@ip-1-1-1-1:~/www/mydomain/mysite/log$ cat thin.5000.log
>> Writing PID to tmp/pids/thin.5000.pid
>> Using rack adapter
>> Exiting!
/usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- bundler/setup (LoadError)
from /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `require'
...
セグメンテーション違反はRubyのバージョンが間違っていることが原因だと思います。明らかに、1.8.7を使用していますが、これは私が望むRubyではありません。ただし、それ以外の場合はルビーのバージョンを確認しても問題ないようです。
ubuntu@ip-1-1-1-1:~$ which ruby
/usr/local/rvm/rubies/ruby-1.9.3-p286/bin/ruby
ubuntu@ip-1-1-1-1:~$ ruby -v
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]
そしてここでそれは再び下で実行されsudo
ます:
ubuntu@ip-1-1-1-1:~$ sudo which ruby
/usr/bin/ruby
ubuntu@ip-1-1-1-1:~$ sudo ruby -v
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
Thinをデーモンとして実行するときにシステムでRuby1.9.3を使用し、これらの厄介なエラーを回避するにはどうすればよいですか?
編集:
/etc/init.d/thinファイルは次のようになります(シンインストールを使用して自動生成されると思います)。
#!/bin/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/bin/thin
SCRIPT_NAME=/etc/init.d/thin
CONFIG_PATH=/etc/thin
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
case "$1" in
start)
$DAEMON start --all $CONFIG_PATH
;;
stop)
$DAEMON stop --all $CONFIG_PATH
;;
restart)
$DAEMON restart --all $CONFIG_PATH
;;
*)
echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
exit 3
;;
esac
- デイブ