2013-05-26 120 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

相关问题