使用Passenger和Nginx将Rails应用程序部署到VPS(EC2)

时间:2013-06-25 10:55:16

标签: ruby-on-rails nginx amazon-ec2 capistrano passenger

我已经开发了一些我准备部署的应用程序。为此,我配置了Capistrano,我已经能够运行cap deploy,它运行正常。但是,我完全迷失了如何从这里继续。我的设置是EC2 + Rails 3.2 + Ruby 1.9.3 + Passenger + Nginx(第一次尝试启动时安装了一个Passenger)+ Capistrano。

到现在为止,我刚刚在我的app根文件夹上运行passenger start,这将在端口3000上启动乘客,我将在端口3001上启动第二个应用程序。现在,我需要的是拥有这2个应用程序在2个不同的域名下,比如www.domain1.com和www.domain2.com。

  1. 我现在应该如何启动服务器?我可以转到Capistrano创建的相应current文件夹并运行类似passenger start -e production -p 3001 -d的内容并开始作为守护程序运行,但是,capistrano不应该处理这个问题吗?我所看到的是,在每次部署时,它会触及restart.txt文件并强制进行“软重启”,如果您更改了宝石,这是不够的(据我所知)。 Capistrano不应该开始和停止乘客,而不是我吗?

  2. 如何在2个域上运行2个应用?据我所知,你不能将一个域指向一个端口,我现在设法做的就是通过rvmsudo在端口80上运行Passenger来运行其中一个应用程序,当然这个仅适用于1个应用程序。搜索了一下后,我发现了一些关于Nginx虚拟服务器的东西。你怎么做到这一点?我的意思是,我从未触及任何特定于Nginx的东西,只是乘客!我是否应该忘记乘客并将Nginx作为服务处理?怎么样?

  3. 提前致谢!

1 个答案:

答案 0 :(得分:1)

我相信启动服务器有一个特定的cap命令来启动服务器,但我对capistrano知之甚少,只是稍微玩过它。

至于第二部分,这是nginx参与的地方,nginx将处理将每个域转发到特定端口,使用proxy_pass,看一下这个例子

server {
    server_name: example1.com;
    proxy_pass: http://127.0.0.1:3000;
}
server {
    server_name: example2.com;
    proxy_pass: http://127.0.0.1:3001;
}