0

我正在尝试设置 Apache/Thin 来支持我的 Rails 3.2.9 应用程序,这意味着将 Apache 和 Thin 设置为守护进程。我正在使用运行 Ruby 1.9.3-p286 的 RVM/gemset,但是,我的守护进程似乎不想使用它,而是选择了一些安装了 Ruby 1.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)

同样,使用相同的命令与sudoyield:

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
  • 戴夫
4

2 回答 2

3

想通了(或者至少,我让它以一种方式工作......)

在 RVM 网站上使用建议...

  1. 确保您的服务(在我的情况下thin为 )安装在您的 RVM gemset 之一中。
  2. 使用: 生成包装器rvm wrapper ruby-1.9.3@mygemset bootup thin,根据您的安装替换参数。它将制作一个脚本/usr/local/rvm/bin/bootup_thin。此包装器将使用您在调用中指定的 gemset 加载。
  3. 编辑/etc/init.d/thin脚本。DAEMON=/usr/local/bin/thin通过设置为使脚本调用生成的 Ruby 包装器DAEMON=/usr/local/rvm/bin/bootup_thin
  4. 运行你的守护进程;它现在应该使用正确的 Ruby 环境。
  5. 克服这个障碍后,我立即遇到了一个不相关的“问题”,这与我的应用程序所需的宝石缺失有关。我认为这与我的应用程序文件夹和守护程序之间使用的不同 gemset 有关。你可能不得不做我做的事;导航到应用程序根目录,使用 显式更改为守护程序使用的 gemset rvm gemset use,然后运行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

于 2012-12-17T07:45:40.303 回答
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

}
于 2012-12-17T06:55:51.323 回答