【发布时间】: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