ruby - 为 nginx 在 passenger 上部署了多个 Ruby on Rails 应用程序

标签 ruby ruby-on-rails-3 nginx passenger

我有两个 RoR 应用程序,一个使用 ruby​​ 2.0.0 和名为 dataentry3 的 gemset(rvm 使用 2.0.0@dataentry3),第二个应用程序使用 ruby​​ 1.9.3@v1。

我尝试通过以下方式部署这些应用:

  1. rvm 使用 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)。

在这些步骤之后,我尝试在地址 http://my-ip/v1 上部署第二个应用程序(新的 phusion passenger 允许运行多个 ruby​​ 版本,see here)

我做的步骤:

  1. rvm 使用 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;
    }
    }
    
    }
    

在此之后,第二个应用程序 (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 passenger gem 之间肯定有冲突。我不明白为什么,因为新版本的 passenger 支持这个。将 passenger_root 指令更改为 /usr/local/rvm/gems/ruby-1.9.3-p429@v1/gems/passenger-4.0.3 后,第二个应用程序开始工作,但第一个不是(几乎相同的错误日志)。

最佳答案

您正在使用 rvm use...

在系统范围内设置 ruby​​ 版本

您需要在您的虚拟主机中使用 PassengerRuby 选项,检查此链接到乘客文档: http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerDefaultRuby

也可以尝试为每个应用使用单独的虚拟主机。

关于ruby - 为 nginx 在 passenger 上部署了多个 Ruby on Rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758555/

相关文章:

ruby-on-rails - 我如何区分是 'first' 还是 'created' 与 first_or_create

带参数的 NGINX URL 重写为不带参数的 URL

jquery - 最先进的 HTTP 推送 : jQuery, cometd?

ruby-on-rails - 关闭 Capybara::ElementNotFound/避免嵌套救援

mysql - Rails 3、MySQL、树形结构

ruby-on-rails - Thin + Nginx + Websockets 配置 | rails

ruby-on-rails - 如何使用monit监控nginx乘客

Ruby:测试未​​运行

ruby-on-rails - 从事件记录中删除括号和引号

mysql - Rails ActiveRecord,从连接表中选择不同的字段并返回所有模型