Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 同一rails服务器上多个项目中的多个站点_Ruby On Rails - Fatal编程技术网

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

Ruby on rails 同一rails服务器上多个项目中的多个站点,ruby-on-rails,Ruby On Rails,我在网上搜索过,但我只能找到关于在多个站点之间共享代码以及将数据库分离为独立模型的信息。这不是我想要的 我想运行一个rails服务器,使用一个DNS地址和一个端口-http://myportal.com-这将处理其他几个站点-http://myportal.com/site1,http://myportal.com/site2等 我希望每个站点都有自己的文件夹(和SCM存储库),自己的数据库,自己的路由,自己的一切。也就是说-我希望能够将每个站点开发为独立站点-这意味着我需要能够以http://

我在网上搜索过,但我只能找到关于在多个站点之间共享代码以及将数据库分离为独立模型的信息。这不是我想要的

我想运行一个rails服务器,使用一个DNS地址和一个端口-
http://myportal.com
-这将处理其他几个站点-
http://myportal.com/site1
http://myportal.com/site2

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

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

这可能吗?现在我正在Windows server 2008服务器上运行gem附带的rails服务器(
rails服务器
,从命令行),但是如果需要安装另一台服务器来实现我描述的目标,我愿意安装另一台服务器


提前感谢!

如果配置正确,您应该能够使用Apache或nginx以及可能的IIS来完成此操作。我最熟悉Apache以及能够实现此操作的灵活和组件

想法是你重写
http://example.com/
将成为
http://example.com:3000/
http://example.com/site2
as
http://example.com:3001/site2
等等

也可以通过Passenger和一些巧妙的使用
VirtualHost
指令来实现这一点,但您可能需要调整以获得适合您的配置。请记住,重写头以内部路由不会影响服务器发出的HTML结果。

创建符号链接:

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>

服务器名本地主机
DocumentRoot/Users/hg/Sites
允许超越所有
选项索引跟随符号链接多视图
命令允许,拒绝
通融
RailsBaseURI/railsproj1
RailsEnv开发

回答来源:

因此,如果我理解正确,我需要使用多个端口,并在DNS中执行路由工作?没有办法使用单个端口执行此操作吗?DNS将客户端定向到您的服务器。您的服务器需要在内部将请求路由到相应的端口。这可能是断开多个站点的最简单方法,因为
VirtualHost
指令默认情况下捕获具有特定主机名的任何内容,但仅捕获特定端口上的内容。使用多个主机+端口组合可以为您提供所需的灵活性。好的,我将尝试一下。有关于rails中的
VirtualHost
的像样教程吗?肯定有10亿个,尽管最流行如果没有帮助,试着发布一个特定的问题。关键是声明
Listen 3001
,并有一个类似
的部分来定义在哪里提供这些内容。更多来源:如果我不必在Windows机器上运行,我会这么做的。。。