我正在尝试设置Apache / Thin来支持我的Rails 3.2.9应用程序,这意味着将Apache和Thin都设置为守护进程。我正在使用运行Ruby 1.9.3-p286的RVM / gemset,但是,我的守护进程似乎并不想使用它,而是选择安装了一些非RVM系统的Ruby 1.8.7。
当我开始瘦身时,这是我收到的错误:
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
的相同命令会产生:
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。但是,检查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作为守护进程运行时,如何让我的系统使用Ruby 1.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
答案 0 :(得分:3)
想出来(至少,我让它以一种方式工作......)
在RVM网站上使用this建议......
thin
)安装在您的一个RVM gemsets中。rvm wrapper ruby-1.9.3@mygemset bootup thin
生成包装器,根据您的安装替换参数。它将创建一个脚本/usr/local/rvm/bin/bootup_thin
。这个包装器将使用您在调用中指定的gemset加载瘦。/etc/init.d/thin
脚本。通过将DAEMON=/usr/local/bin/thin
设置为DAEMON=/usr/local/rvm/bin/bootup_thin
rvm gemset use
使用的gemset,然后运行bundle install
将必要的gem安装到守护程序使用的gemset中。有了这个,我让我的服务器运行Apache / Thin。对于那些希望这样做的人,请使用这些页面。
第一名:http://articles.slicehost.com/2008/5/6/ubuntu-hardy-thin-web-server-for-ruby
第二名:http://articles.slicehost.com/2008/5/6/ubuntu-hardy-apache-rails-and-thin
答案 1 :(得分:0)
您可以编辑/etc/init.d/thin并更改此部分:
run_action() {
ACTION="$1"
if [ -x /usr/bin/ruby1.8 ]; then
/usr/bin/ruby1.8 $DAEMON $ACTION --all /etc/thin1.8
fi
if [ -x /usr/bin/ruby1.9.1 ]; then
/usr/bin/ruby1.9.1 $DAEMON $ACTION --all /etc/thin1.9.1
fi
}