如何在同一个ec2实例中运行两个独角兽环境

时间:2014-05-31 20:56:54

标签: ruby-on-rails ubuntu nginx amazon-ec2 unicorn

我在Ubuntu EC2实例中的Unicorn上运行的Nginx和Rails API(后端)上运行了一个AngularJS(前端)。

Rails API与其他一些平台(如Paypal和其他服务)集成,因此我有一些配置属性可能具有不同的值,具体取决于环境。

另一方面,我试图在同一个EC2实例中(在不同的路径中)部署两个不同的环境。

我对AngularJS Nginx部分没有任何问题。我有两个指向不同路径的服务器。但问题是当我启动Unicorn时,我在一种环境模式(测试或生产)中启动它,我需要同时启动和运行这两种环境。可能吗?我应该启动两个独角兽服务器吗?

有没有更好的方法?

   **UPDATE**

这是我的config / unicorn.rb文件(我不知道它做了什么,我是从某处复制过来的。)

# config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

这是我的Nginx网站 - 可用/默认:

server {

        root /home/ubuntu/test/apps/domain/app;
    index index.html index.htm;

    # Make site accessible from http://localhost/
        server_name www.test.domain.com;
}

server {

    server_name www.domain.com;
    root /home/ubuntu/production/apps/domain/app;
}

Nginx网络服务器运行正常,但我想要的是www.test.domain.com重定向到在测试环境中启动的独角兽,并且www.domain.com重定向到独角兽生产环境(可能在不同的端口监听) )。

我没有任何其他Nginx配置。

1 个答案:

答案 0 :(得分:1)

当独角兽开始时,它会创建3个“锁”。一个是进程id文件,第二个是套接字文件,第三个是服务器侦听的tcp端口。

所以,让我们假设您在生产环境中启动应用程序,如下所示:

unicorn_rails -E production -c config/unicorn.rb -D

接下来你需要做的是:

cp config/unicorn.rb config/unicorn_test.rb

然后,编辑新文件并更改这些行(示例值,但是您得到了图片),如果已定义:

pid APP_PATH + "/tmp/pids/unicorn.pid" # change to another pid
[..]
listen APP_PATH + "/tmp/pids/.unicorn.sock", :backlog => 64 # use antother .sock
listen 8080, :tcp_nopush => true # use another port

然后,您必须复制nginx服务器配置以指向新应用程序。相同的根,不同的套接字,不同的端口,无论使用哪个。

最后:

unicorn_rails -E test -c config/unicorn_test.rb -D