Rails 在一个现成的 Rails 写的社区网站外面套一个主页,有没有什么解决方案呢?

blacktulip · 2015年07月23日 · 最后由 1010101001110 回复于 2016年06月03日 · 2504 次阅读

情况是这样的,现在有个 Rails 写的社区网站,没有什么特别之处,也就是有用户系统,能发贴回帖,能上传资源,能发布一些新闻什么的。 这个社区网站的网址是 http://community.blah.com 形式的。

现在的需求是做一个主页 http:///www.blah.com ,要从社区网站里面抽一些信息出来,能够在主页上面滚动显示这样子。

那么一般这种事情是怎么干的呢?我想到几种方法:

  • 直接把主页做到社区这个 app 里面。不过这就涉及把整个 app 的根域名换掉,原来的链接就都变了,有什么机制能让原来的链接都不变么?
  • 做一个新的 Rails app,两个 app 共享一个数据库,不知道有没有什么坑。
  • 做一个新的 Rails app 或者纯前端 app,通过社区网站的 api 取信息,这个看起来最正常,但是做起来最麻烦。

请问还有没有什么更好的解法了,或者已经有现成的方案么?

谢谢!

应该可以通过在 route 中设置 constraints方法来判断域名 参考http://guides.rubyonrails.org/routing.html#request-based-constraints

想到一个看起来很丑陋的办法:iframe

reverse-proxy

#3 楼 @ghprince 可否详细说说这个方案,谢谢

#4 楼 @blacktulip http://www.nicolasgarnil.me/blog/2013/handling-multiple-domains-routes-in-ruby-on-rails/

我就是用这个办法,一套程序好几个域名,一个域名在 controller 下对应一个目录,

每个网站都相似,但也有不同。

6 楼 已删除
  1. 新 APP,社区网站提供 API
  2. Nginx 上两个 server_name,APP Router 内 constraints 到不同的 controller 中去

工作量两个差不多,还是用 API 模式吧

#7 楼 @vkill API 涉及额外的数据渲染解析,暴露出来的接口还要额外的安全考虑,我个人偏向你说的第二种方案

我会选提供 API 让前端去渲染吧,如果不考虑 SEO 第一种方法 用 Nginx 代理新域名的页面到原来的域名,看起来就达到你要的效果了

我做过类似的功能,就是用 1 楼的兄台的解决办法。没必要碰前端服务器,rails 层面就很好解决的事情。

constraints(lambda { |req| req.env['HTTP_HOST'].present? && req.env['HTTP_HOST'].include?('blah.com ') }) do
  get '/', to: 'home#index2'
end

谢谢楼上各位,已经用 constraints 解决。

重定向,或者反向代理。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号