2

注意:我是 ruby​​ on rails 和服务器托管的新手,我无法表达我的愿景作为问题,如果我错了或纠正我,请原谅我。

嗨,我有一个使用 ruby​​ on rails 开发的产品,将托管在具有 32 GB 内存和 8 核服务器处理器的专用服务器中。每个客户端都应该有单独的数据库和单独的 rails 实例。我正在复制 - 使用单独的文件夹为每个客户端复制代码并提供不同的数据库名称,因此每个都用作不同的实例。

例如:

我有一个主临时域

www.product.com

对于每个客户端,我需要将单独的子域映射到具有相同端口(80)但具有不同 rails 实例名称的同一服务器

www.client1.product.com
www.client2.product.com
www.clientn.product.com

据我所知,如果我启动 rails 实例,每个实例都将从单独的端口号开始

client1 with start at port 3001
client2 with start at port 3002
client3 with start at port 3003

我的问题是如何将端口 80 的所有实例映射到适当的相同子域

如果我访问

www.client4.product.com ,我需要让应用程序在端口 3004 中运行

更新:

任何人都可以为上述场景发布 phusion 乘客 + Nginx 的步骤

4

2 回答 2

3

使用 Phusion Passenger + Apache,实现您想要的最简单的方法是使用 VHOST。

只需在不同的文件夹中签出您的项目:

  • /var/www/rails/client1/
  • /var/www/rails/client2/
  • /var/www/rails/client3/
  • /var/www/rails/client4/

然后为 /etc/apache2/sites-available/client1.foobar.com 中的每个客户端创建一个 VHOST 文件

<VirtualHost *:80>
        ServerName client1.foobar.com
        DocumentRoot /var/www/rails/client1/current/public

        <Directory /var/www/rails/client1/current/public>
                Allow from all
                Options -MultiViews
        </Directory>

</VirtualHost>

然后将该 VHOST 添加到托管域 a2ensite client1.foobar.com 的列表中

然后你重新加载 apache /etc/init.d/apache2 reload

我以为您使用 capistrano 进行部署,这就是我添加“当前”文件夹的原因,但如果您不这样做,只需删除该部分(并真正考虑采用 capistrano)

我还假设你的服务器是一个 linux 机器,但如果它不仅仅是阅读 apache 的关于重新加载配置和添加新 VHOST 的文档(并且真的考虑拥有一个 linux 服务器)

PS:哦,如果您不使用 capistrano 并且您对代码库进行了更新,请不要忘记触摸应用程序目录中的“tmp/restart”文件来告诉乘客重新启动 rails 进程。但不要尝试在生产中使用“rails server”命令;)

于 2012-06-30T19:22:24.557 回答
3

这是 nginx + 乘客的最小服务器块的示例

server {
        listen 80;
        server_name client1.foobar.com;
        root /var/www/rails/client1/current/public;

    passenger_enabled on;
}

配置 nginx 的常用方法是创建一个子目录“sites-available”,在其中放置一个名为“client1.foobar.com”的文件,其中包含此代码段,然后在另一个名为“sites-enabled”的子目录中为该文件创建一个符号链接. 最后,在 http 块内的 nginx.conf 中添加以下行

include /path/to/your/sites-enabled/*;

不要忘记重新加载/重新启动您的 nginx。

这种使用符号链接的方式允许您通过删除符号链接轻松禁用您想要的任何站点,而不会丢失您的配置文件。

您可以在此处找到一些示例和更多文档:http ://www.modrails.com/documentation/Users%20guide%20Nginx.html

于 2012-09-12T14:55:26.597 回答