同一rails服务器上的多个项目中的多个站点

时间:2012-03-07 01:45:53

标签: ruby-on-rails

我搜索了网页,但我只能找到有关在多个网站之间共享代码以及将数据库分离到隔离模型的信息。这不是我想要的。

我想运行单个rails服务器,只有一个DNS地址和一个端口 - http://myportal.com - 可以处理其他几个网站 - http://myportal.com/site1http://myportal.com/site2等。

我希望每个站点都拥有自己的文件夹(和SCM存储库),它自己的数据库,它自己的路由 - 它自己的一切。也就是说 - 我希望能够将每个站点作为独立站点开发 - 这意味着我需要能够以http://localhost:3000而不是http://localhost:3000/site1运行site1站点。

在服务器上,根站点(响应http://myportal.com地址的站点应该是我运行服务器的站点,它应该知道其他站点的绝对路径(它们将是不同的)服务器上的目录,而不是根站点的子目录中的目录)并为它们提供路由信息 - 但它也应链接到其他站点routes.rb文件。这意味着如果我去地址http://myportal.com/site1/books/根网站应该处理http://myportal.com/site1,而site1应该处理/books/。根网站不需要知道其他网站的内部路由结构。

这可能吗?现在我在Windows Server 2008服务器上运行gem(命令行中的rails server)附带的rails服务器,但我愿意安装另一台服务器,如果这是完成目标所需的内容我描述

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果配置正确,您应该可以使用Apache或nginx以及可能的IIS执行此操作。我最熟悉Apache以及灵活的mod_rewritemod_proxy组件,可以促进这一点。

您的想法是将http://example.com/重写为http://example.com:3000/,将http://example.com/site2重写为http://example.com:3001/site2,依此类推。

也可以使用Passenger和VirtualHost指令巧妙地使用它,但你可能不得不摆弄以获得适合你的配置。请记住,重写标头以在内部路由不会影响服务器发出的HTML。

答案 1 :(得分:0)

创建符号链接:

cd ~/Sites
ln -s /Users/hg/Developer/Rails/railsproj1/public ./railsproj1

修改apache配置文件

<VirtualHost *:80>
  ServerName localhost
  DocumentRoot /Users/hg/Sites
  <Directory /Users/hg/Sites>
    AllowOverride All
    Options Indexes FollowSymLinks MultiViews
    Order allow,deny
    Allow from all
  </Directory>
  RailsBaseURI /railsproj1
  RailsEnv development
</VirtualHost>

答案来源:http://collab.stat.ucla.edu/users/jose/weblog/9e335/