【问题标题】:How can I run two unicorn environments in same ec2 instance如何在同一个 ec2 实例中运行两个独角兽环境
【发布时间】:2014-07-21 09:17:21
【问题描述】:

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

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 配置。

【问题讨论】:

  • 独角兽是应用服务器,它为应用服务。您需要服务的每个应用程序,您应该在不同的端口或套接字上启动不同的实例。它们可以同时运行,完全没有问题,除非你告诉它们在同一个资源(端口/套接字)上启动,在这种情况下它根本不会启动
  • @RubyRacer 只是为了确认我们在同一页面上。这两个应用程序应该在不同的环境中运行。因此,一只独角兽应该在测试中运行,而另一只在生产中运行。这可能吗?如果是这样,你能否给我一些关于如何做的更多细节。我不知道。

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


【解决方案1】:

当独角兽启动时,它会创建 3 个“锁”。一是进程id文件,二是socket文件,三是服务器监听的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

【讨论】:

  • 我已经用我的 Nginx 和 Unicorn 配置文件更新了上面的帖子。我有一些疑问。我了解您的回答我应该做的是复制我当前的 config/unicorn.rb (上图)并添加您在上面附加的那 3 行。我的问题是我以前的生产文件中没有类似的东西。可以吗?我的第二个问题与您的评论有关:“您必须复制您的 nginx 服务器配置以指向新应用程序”。我已经添加了我的 nginx 站点可用文件。我想我没有任何其他配置文件。我没有任何与独角兽配置相关的内容。
猜你喜欢
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多