从相同的Rails代码库运行2个网站?

时间:2011-12-03 20:49:29

标签: ruby-on-rails architecture

我目前正在开发2个具有相同功能的单个客户端站点,但客户端希望在后端组合管理员以方便使用。这些站点将共享一个数据库,用户表等。

如何设置Rails应用程序,以便域名是唯一的标志,用于确定用户注册的网站,以及他们登录时看到的内容?

详细信息

我有两个摄影网站: photosoftrains.com planephotos.com 。这些网站将具有相同的功能,但视觉设计完全不同。访问 photosoftrains.com 的网站访问者应该看到火车站点(火车背景,火车内容,火车照片)。如果他们注册,他们可以评论并上传火车照片到网站。 如果相同的登录用户转到 planephotos.com ,则他们必须重新注册才能与该站点进行交互。否则,他们仍然可以作为未注册的用户浏览该网站。

Babysteps

  1. 检测域名的最佳方法是什么,并将未登录的用户重定向到相应的主页?
  2. 当用户开始与其中一个特定网站进行交互时,如何设置全局变量,以便浏览或添加内容与其他网站完全隔离,但尽可能高效?< / LI>

    这是否可能,或者我应该将它们分成两个完全不同的应用程序,只是共享数据库?

3 个答案:

答案 0 :(得分:3)

我通常为Admin部分做的是使用子域创建一个单独的命名空间(即,在app / controllers下面创建一个单独的目录)。本质上,视图和控制器都是不同的,但模型都是相同的。

在我的路由中,文件我通过执行以下命令为子域创建一些约束:

constraints(:subdomain => /admin/) do
   namespace :admin do
       resources :mymodel # ......
   end
end

您不需要子域,您需要完全独立的域。您可以尝试以下链接:Rails routing to handle multiple domains on single application

就设置全局变量而言,如果您创建单独的命名空间并相应地路由,则不需要。

答案 1 :(得分:1)

制作两个应用。当它发生时处理合并。

您可以随后将一个数据库播种到另一个数据库中。

制作一个包含所有模型和控制器逻辑的应用程序。当您开始设计工作时,使用git创建两个单独的分支。

他们将来合并这两个网站可能会遇到一些问题,因为用户可能不喜欢他们突然在他们没有注册的网页上拥有帐户。

在这种情况下,我真的会讨论两个网站的需求。只有一个有很多可靠的论据。他们可能有他们的理由,但从技术角度来看,两个不同的应用程序是最好的方法。

Rails是“约定优于配置”。这个场景将给你一个史诗般的战斗铁与许多配置问题。而且你不想打铁。

拥有一个应用程序的唯一优势是组合管理员。但是,这将需要有两个单独的用户列表(以及您拥有的所有其他模型)。因此,与拥有两个单独的管理员一样痛苦,

答案 2 :(得分:0)

构建两个单独的应用程序可能是将来的维护痛苦,但另一方面,为每个应用程序隔离数据可能会导致数据库级别的问题。如果您决定构建一个应用程序,则可以在视图文件夹中创建不同的文件夹,并将不同的视图分开。 request.url会给你网址。最好与客户讨论可能影响您实施的未来任何变化。

PS。我会去两个单独的申请。对我来说,这是解决这种情况最安全的方法。任何未来的更改和升级都可以轻松地进行到其中一个应用程序并进行转移。