3

私は 2 つの RoR アプリを持っています.1 つは ruby​​ 2.0.0 と dataentry3 という gemset を使用しており (rvm は 2.0.0@dataentry3 を使用)、2 つ目のアプリは ruby​​ 1.9.3@v1 を使用しています。

これらのアプリを次の方法でデプロイしようとしました:

  1. rvm use ruby-2.0.0@dataentry3
  2. cd dir/app1
  3. gem install passenger
  4. passenger-install-nginx-module
  5. nginx.conf を編集します。

    http {
    passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3;
    
    server {
        listen       80;
        server_name  localhost;
        location / {
            passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195@dataentry3/ruby;
            root /var/www/adgally/dataentry4/public;
            passenger_enabled on;
        }
    }
    
    }
    
  6. すべて正常に動作しています ( http://my-ip)。

これらの手順の後、アドレスに 2 番目のアプリをデプロイしようとしましたhttp://my-ip/v1(新しい Phusion パッセンジャーでは、複数の Ruby バージョンを実行できます。こちらを参照してください) 。

私がした手順:

  1. rvm use ruby-1.9.3@v1
  2. cd dir/app2
  3. gem install passenger
  4. nginx.conf を編集します。

    http {
    passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3;
    
    server {
        listen       80;
        server_name  localhost;
        location / {
            passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195@dataentry3/ruby;
            root /var/www/adgally/dataentry4/public;
            passenger_enabled on;
        }
    location /v1 {
         passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p429@v1/ruby;
         root /var/www/adgally/v1/public;
         passenger_enabled on;
    }
    }
    
    }
    

この後、2 つ目のアプリ ( http://my-ip/v1) が動作しなくなりました。エラーが発生します:

Permission denied - /nonexistent (Errno::EACCES)
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:247:in `fu_mkdir'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:221:in `block (2 levels) in mkdir_p'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:219:in `reverse_each'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:219:in `block in mkdir_p'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:205:in `each'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:205:in `mkdir_p'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:145:in `mkdir'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:162:in `block in compile'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `each'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `each_with_index'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `compile'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:138:in `compile_and_load'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:37:in `start'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:205:in `<top (required)>'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:48:in `init_passenger'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:126:in `<module:App>'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:6:in `<module:PhusionPassenger>'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:5:in `<main>'

ruby-2.0.0 と ruby​​-1.9.3 のパッセンジャー gem の間に競合が存在する必要があります。新しいバージョンのパッセンジャーがこれをサポートしているため、理由がわかりません。passenger_rootディレクティブを2 番目のアプリに変更すると/usr/local/rvm/gems/ruby-1.9.3-p429@v1/gems/passenger-4.0.3動作し始めましたが、最初のアプリは動作しませんでした (ほぼ同じエラー ログ)。

4

2 に答える 2

1

あなたはRubyのバージョンをシステム全体に設定していますrvm use...

仮想ホストで PassengerRuby オプションを使用する必要があります。パッセンジャー ドキュメントへのリンクを確認してください: http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerDefaultRuby

また、アプリごとに個別の仮想ホストを使用してみてください。

于 2013-05-26T11:19:34.570 に答える
0

/nonexistant は、「nobody」ユーザーのホーム ディレクトリです。つまり、Phusion Passenger は「nobody」ユーザーとしてアプリを実行しようとしましたが、そのユーザーが有効なホーム ディレクトリを持っていないために失敗しました。

おそらく、アプリを「nobody」ユーザーとして実行するつもりはありませんでした。これを解決するには、config.ru を実行するユーザーに chown します。詳細については、Phusion Passenger でのユーザー切り替えのサポートについてお読みください。

于 2013-05-26T13:31:49.583 に答える