2013-05-26 122 views
3

我有兩個RoR應用程序,一個是使用ruby 2.0.0,名爲dataentry3的gemset(rvm使用[email protected]),第二個應用程序使用ruby 1.9.3 @ V1。在nginx上部署多個Ruby on Rails應用程序

我試圖部署方式如下這些應用程序:

  1. rvm use [email protected]
  2. cd dir/app1
  3. gem install passenger
  4. passenger-install-nginx-module
  5. 編輯nginx.conf:

    http { 
    passenger_root /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3; 
    
    server { 
        listen  80; 
        server_name localhost; 
        location/{ 
         passenger_ruby /usr/local/rvm/wrappers/[email protected]/ruby; 
         root /var/www/adgally/dataentry4/public; 
         passenger_enabled on; 
        } 
    } 
    
    } 
    
  6. 一切工作正常(http://my-ip)。

完成這些步驟之後我試圖部署上的地址http://my-ip/v1秒應用程序(新PHUSION乘客允許運行多個Ruby版本,see here

步驟我做:

  1. rvm use [email protected]
  2. cd dir/app2
  3. gem install passenger
  4. 編輯nginx.conf:

    http { 
    passenger_root /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3; 
    
    server { 
        listen  80; 
        server_name localhost; 
        location/{ 
         passenger_ruby /usr/local/rvm/wrappers/[email protected]/ruby; 
         root /var/www/adgally/dataentry4/public; 
         passenger_enabled on; 
        } 
    location /v1 { 
        passenger_ruby /usr/local/rvm/wrappers/[email protected]/ruby; 
        root /var/www/adgally/v1/public; 
        passenger_enabled on; 
    } 
    } 
    
    } 
    

在此之後,第二應用(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/[email protected]/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:145:in `mkdir' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:162:in `block in compile' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `each' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `each_with_index' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `compile' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:138:in `compile_and_load' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:37:in `start' 
    /usr/local/rvm/gems/[email protected]/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/[email protected]/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:48:in `init_passenger' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:126:in `<module:App>' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:6:in `<module:PhusionPassenger>' 
    /usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:5:in `<main>' 

必須有紅寶石2.0.0和Ruby-1.9.3乘客寶石之間的衝突。我不明白爲什麼,因爲新版本的乘客是支持這一點的。在passenger_root指令更改爲/usr/local/rvm/gems/[email protected]/gems/passenger-4.0.3後第二個應用程序開始工作,但第一個不是(幾乎相同的錯誤日誌)。

回答

0

/nonexistant是'nobody'用戶的主目錄。換句話說,Phusion Passenger試圖以'nobody'用戶的身份運行您的應用程序,並且因爲該用戶沒有有效的主目錄而失敗。

您可能並未打算將您的應用作爲「無人」用戶運行。爲了解決這個問題,將你的config.ru配置給你想要運行的用戶。欲瞭解更多信息,請閱讀User switching support in Phusion Passenger

+0

我的Rails應用程序中的所有文件都由root用戶擁有。當我試圖在同一時間啓動這兩個應用程序時發生錯誤。我可以請你看看我的第二個nginx.conf並告訴我是否正確設置? – Arti

+1

由於安全原因,Phusion Passenger拒絕以root身份運行您的應用程序。如果您config.ru的所有者是root,然後它會運行你的應用程序爲[passenger_default_user(http://www.modrails.com/documentation/Users%20guide%20Nginx.html#PassengerDefaultUser),默認爲「任何人」。請閱讀[用戶切換支持](http://www.modrails.com/documentation/Users%20guide%20Nginx.html#user_switching),其中詳細解釋了確切的行爲。 – Hongli

相關問題