现在有一个 rails 项目多个公司共同使用,但是希望一个 rails server,一套代码,但是数据库不同。在 rails server 通过域名选择不同的数据库进行访问。不知道各位大佬有没有比较好 gem,或者好的解决方案
因为将来会有很多公司都会访问这个 rails server,会根据域名来解析 render 不同的视图层。多个 rails server 的话将来项目特别多,不方便进行维护和迭代
对你这需求略蒙。。。可能我理解有问题
是不是应该 用 nginx 的 url 重写,类似这种需求?
比如主域名abc.com
aaa.com => abc.com/1/
bbb.com => abc.com/2/
依然很疑惑。。。如果没有公共的数据弄成全部独立的应用就行了。。再配合自动部署。。和维护一个应用一样啊。。。觉得占空间可以主应用之外都做成软链接。。。。(你以后访问量大了之后是不是还要拆开?。。)
你好,因为视图层是通过域名解析来进行 render,所以就放在一个项目上了,网站的功能都是相同的,应用层也是共同的,只是视图层不一样。因为每个用户都有自己单独的数据需要处理。所以要求数据库进行拆分。因为如果跑多个 rails server 的话,将来服务器的资源就很紧张
Rails 自带可以管理多个数据库,然后前面用 nginx 定向到同一个 Server 的不同地址上,应该可行。 https://stackoverflow.com/questions/6122508/connecting-rails-3-1-with-multiple-databases
Rails 是常驻内存的网站程序,你多个域名分别对应不同的数据库,可能会造成大量内部的全局变量互相干扰,比如从一个数据库读出来的数据没有清理干净,然后被另一个域名调用走了。
如果你是架构大佬,对于这种场景能够做到非常详细的测试,那当然 OK。否则迟早有一天你会被其他开发人员打死……
这个需求绝对是有的,特别是针对一些旧系统做追加开发,但是楼主的需求好像用不着故意弄复杂。
技术上来说处理多个数据库是可能的,网上有很多这种文章: https://www.thegreatcodeadventure.com/managing-multiple-databases-in-a-single-rails-application/
还有人干脆就写了 gem:https://github.com/ankane/multiverse
你好,因为我们这个项目相当于帮助客户定制公司网站,但是功能是一样的。就是每个客户的自己的数据库不一样,视图层不一样。然后我们的技术总监希望是一个 rails server 跑起来,然后每个客户的数据库单独进行管理。这个项目前期架构不好。
提供一个思路,建几个模板型的 rails 项目,编号 1-n,作为主支,每个公司都是其中之一的分支,每个公司单独部署,可考虑前后端分离,用 vue 或 react 提供更好前端交互体验,后台用 activeadmin 提供增删改查就行
使用 Rails 的一条原则就是,如果你的业务和 Basecamp 不一样,就不要用 Rails。
比如 Log,同样是 User.find,不同的数据库查出来的结果是不一样的,而 Rails 原生 log 不会告诉你当前在哪个数据库上操作,需要自己 Hack。还有更恼人的缓存问题。把每个公司都装入不同的 module 会好一点,但是也要小心测试确保没 bug。
谢谢分享,我们这个小型项目。是没有做前后端分离的。我之前也是通过分支管理。但现在维护起来不容易。每个分支都需要单独去维护
我最近也碰到需要拆库的问题,不过我们面对的问题是有几张表数据量特别大,且一直会成倍的增长,需要有个机制能平滑的拆分并处理。开始我也考虑拆数据库,不过现在打算拆分表。
楼主的问题类似多租户的问题,这个 gem 应该可以解决: https://github.com/influitive/apartment ,看了下视频介绍,应该蛮贴近楼主描述的场景的。
使用了 Apartment 这个包进行管理,使用了 Apartment-sidekiq 进行了 sidekiq 进行管理