我在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配置。
答案 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