0

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)

同様に、同じコマンドをsudoyieldsで使用すると次のようになります。

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
  • デイブ
4

2 に答える 2

3

それを理解しました(または、少なくとも、私はそれを一方向に機能させました...)

RVM サイトでこの提案を使用する...

  1. サービス (私の場合はthin) が RVM gemset の 1 つにインストールされていることを確認してください。
  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 に明示的に変更しrvm gemset use、 を実行bundle installして必要な gem をデーモンが使用する gemset にインストールします。

これで、サーバーを Apache/Thin で実行できるようになりました。同じことをしたい人は、これらのページを使用してください。

1位: http://articles.slicehost.com/2008/5/6/ubuntu-hardy-thin-web-server-for-ruby

2番目: 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 に答える