0

Railsの経験はあまりありません。水曜日に戻って、Redmine をアップグレードし、プラグインをアップグレードするように言われました。私はこれに 3 日間取り組んできましたが、Rails が最新のパッケージ管理の時代に入るには、まだどこまで行かなければならないかを知ってショックを受けました。

私はCentos 6.3を使用しています。最初は Ruby 1.8.7 にアップグレードしました。これは Centos リポジトリにあるものであり、Redmine をアップグレードするにはそれで十分だったからです。しかし、redmine_backlogs プラグインにたどり着いたとき、Ruby の新しいバージョンが必要であることに気付きました。Centos で Ruby 1.9.3 を入手するのは簡単ではありません。機能するものを得る前に、4 つの異なるチュートリアルを試しました。手動で修正しなければならなかった奇妙なパスがたくさんあります。

Passenger で Nginx を試してみましたが、うまく動かなかったので、後で Phusion Passenger Standalone を実行しました。

これで、Rails 3.2.11 が実行されました。ここ数週間、Rails の世界で起きているすべてのセキュリティ問題を考えると、これにパッチを当てる必要があると思います。

2.2 の最新の Redmine にアップグレードしました。

私の Nginx は、必要なバージョンとは異なるバージョンの Ruby を使用していると思います。私がこれを行う場合:

/opt/nginx/sbin/nginx -V

それから私はこれを見ます:

    built by gcc 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)            
    TLS SNI support enabled                                                        
    configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module --with-cc-opt=-Wno-error --with-pcre=/tmp/root-passenger-14193/pcre-8.31 --add-module=/usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/ext/nginx

Ruby 1.9.3 の代わりに Ruby 1.8 を使用しているように見えるのはどれですか?

私がこれを行う場合:

/opt/nginx/sbin/nginx -s stop

その後:

/opt/nginx/sbin/nginx

nginx を再起動しますが、ブラウザを更新すると、次のようになります。

Passenger encountered the following error:
The application spawner server exited unexpectedly: Unexpected end-of-file detected.

Exception class:
PhusionPassenger::Rack::ApplicationSpawner::Error
Backtrace:
#   File    Line    Location
0   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/application_spawner.rb    135 in `start'
1   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb   253 in `spawn_rack_application'
2   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb  132 in `lookup_or_add'
3   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb   246 in `spawn_rack_application'
4   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb  82  in `synchronize'
5   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb  79  in `synchronize'
6   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb   244 in `spawn_rack_application'
7   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb   137 in `spawn_application'
8   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb   275 in `handle_spawn_application'
9   /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb 357 in `__send__'
10  /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb 357 in `server_main_loop'
11  /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb 206 in `start_synchronously'
12  /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/helper-scripts/passenger-spawn-server    99  

この問題に関連するここからのコメントを見ました:

いくつかのインストール手順(神の祝福のVMとスナップショット)を確認した後、問題を解決しました。通常のユーザーアカウントと apache ユーザーは別の ruby​​ バージョン (1.8) を使用し、root は (1.9.3) を使用します。今はすべて正常に動作します。

しかし、サーバーで修正する方法がわかりません。

Nginx ログを調べてみました。

tail /var/log/nginx/error.log

しかし、最新のエラーは 2 月 5 日のものなので、Phusion Passenger を使用するように切り替えると、エラー ログは新しい場所に移動したのではないかと思いますが、Nginx がエラー ログを保存する場所を見つける方法がわかりません。 Phusion Passengerがそれを制御しています。助言がありますか?

アップデート:

ここで新しいNginxエラーログを見つけました:

/opt/nginx/logs/error.log

エラーは次のとおりです。

2013/02/11 17:02:15 [notice] 25295#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

2013/02/11 17:06:23 [notice] 25360#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

2013/02/11 17:10:47 [notice] 25433#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

2013/02/11 17:13:35 [notice] 25522#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

2013/02/11 17:16:31 [notice] 25598#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

私がこれを行う場合:

echo $PATH、 それから:

/usr/local/rvm/gems/ruby-1.9.3-p385/bin:/usr/local/rvm/gems/ruby-1.9.3-p385@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p385/bin:/usr/local/rvm/bin:/sbin:/bin:/usr/sbin:/usr/bin

Passenger docs ページから:

デフォルト値は ruby​​ です。これは、Ruby インタープリターが PATH 環境変数に従って検索されることを意味します。

したがって、1.8 ではなく Ruby 1.9.3 を使用すると考えるでしょう。

を調べるとconfig.ru、次のように表示されます。

require::File.expand_path('../config/environment',  __FILE__)
run RedmineApp::Application

助言がありますか?

4

1 に答える 1

0

NginxのPhusion Passenger

Ruby インタープリターは、passenger_rubyディレクティブによって純粋に決定されます。他には何もありません。それを変更すると、期待どおりに動作します。これは、異なる Ruby バージョンに属する RubyGems を使用して Phusion Passenger を最初にインストールした場合でも機能します。

4.0.0 より前のバージョンでは、Nginx インスタンス全体で単一の Ruby バージョンのみがサポートされていたためpassenger_ruby、グローバル サーバー構成でのみ発生する可能性があります。

バージョン 4.0.0 (現在はリリース候補版)以降、Phusion Passenger は同じ Nginx インスタンスで複数の Ruby または Python インタープリターをサポートしています。そのため、バージョン 4.0.0 以降、このオプションは次の場所で発生する可能性があります。

  • 「http」構成ブロック内。
  • 「サーバー」構成ブロック内。
  • 「場所」構成ブロック内。
  • 「if」構成スコープ内。

passenger_rubyブロック内(httpつまり、passenger-install-nginx-module出力するもの) は、Ruby Web アプリのデフォルトの Ruby インタープリターとして使用されます。ただし、デフォルトでは にある最初のコマンドが使用されるため、ブロックでa を指定する必要はありませpassenger_rubyhttpruby$PATH

その Web アプリに別の Ruby インタープリターを使用する場合は、特定のコンテキストでpassenger_rubyorをオーバーライドすることもできます。passenger_python例えば:

http {
    passenger_root ...

    # Use Ruby 1.8.7 by default.
    passenger_ruby /usr/bin/ruby1.8
    # Use Python 2.6 by default.
    passenger_python /usr/bin/python2.6

    server {
        # This Rails web app will use Ruby 1.8.7
        listen 80;
        server_name www.foo.com;
        root /webapps/foo/public;
    }

    server {
        # This Rails web app will use Ruby 1.9.3, as installed by RVM
        passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3/ruby;

        listen 80;
        server_name www.bar.com;
        root /webapps/bar/public;

        # If you have a web app deployed in a sub-URI, customize
        # passenger_ruby/passenger_python inside a `location` block.
        # The web app under www.bar.com/blog will use JRuby 1.7.1
        passenger_base_uri /blog;
        location /blog {
            passenger_ruby /usr/local/rvm/wrappers/jruby-1.7.1/ruby;
        }
    }

    server {
        # This Flask web app will use Python 3.0
        passenger_python /usr/bin/python3.0;

        listen 80;
        server_name www.baz.com;
        root /webapps/baz/public;
    }
}

Phusion Passenger スタンドアロン

Ruby インタープリターは、コマンドの開始に使用した Ruby インタープリターによって純粋に決定されますpassenger。それを変更すると、期待どおりに動作します。これは、異なる Ruby バージョンに属する RubyGems を使用して Phusion Passenger を最初にインストールした場合でも機能します。

于 2013-03-16T19:34:57.410 に答える