aar*_*ell 17 apache ruby-on-rails
我的问题是寻求最佳实践,一般建议和见解,而不是解决特定问题.
我正处于规划Rails项目的早期阶段,我认为这个项目相当大.在最简单的层面上,它为目标用户提供了一个千篇一律的CMS.因此,用户注册并选择一个子域名,并获得一个非常基本的CMS网站.
因此整个应用程序有大约4个不同的"边":
所以我真正想要的是构建应用程序的最佳实践.即它应该全部归入一个巨大的应用程序,还是应该分成两个(或更多)较小的应用程序?
如果部署为一个应用程序,我可以看到有关路由的问题,因为销售网站和用户的网站都需要设置根路径,而且我不希望我为销售网站设置的路由可以通过用户的网站访问.任何事情都可以在Rails或Apache级别(mod重写?)完成,以确保没有路由混淆?
如果拆分超过2个或更多应用程序,如何让应用程序共享同一个数据库?这是一个好主意吗?拆分应用程序有什么好处(比如在应用程序的一个区域中隔离问题,而不是将所有内容都关闭)?
我意识到这篇文章提出了不同的问题,但感谢你能给我的任何建议和见解.
我相信将您的问题分离到单独的应用程序中的好处超过了成本.我可能会开始只有2个应用程序(一个用于主站点和superadmin,一个用于客户端站点和管理员),访问同一个数据库,但你可以做4个.
缺点是你没有真正的隔离,因为你的所有应用程序都绑定到一个数据库.您最终会遇到数据库的扩展问题,但是从一个数据库开始简单就可以启动了.稍后扩展的一种策略是添加客户端站点和主站点应用程序使用的从属数据库,而管理应用程序使用主数据库.这与缓存的TON将使你相当远.
让多个rails应用程序访问一个数据库没有任何问题,但是您需要一种方法来跨应用程序共享公共代码.你的模特大部分.之前我已经完成了这个操作,将我的所有模型都放在一个插件中,我作为git中的子模块或svn中的外部模块共享.拥有单独的应用程序将使每个应用程序更小,更易于维护.
但是,您在哪里保留迁移?你在哪里测试你的模型?我会选择superadmin应用程序.此外,您对模型或架构进行了更改,现在您必须检查2-4个应用程序并确保它们仍然有效!
更好的隔离,通过Web API(SOA)分离数据库和应用程序间通信,您不必担心这一点.我认为SOA是追求某一点的方法,但是当你刚开始时,SOA可能还为时过早.
无论如何,拥有单独的应用程序可以为SOA做好准备,但是您不必跳过单个数据库来启动.
我会把这一切都捆绑到同一个应用程序中,因为你不会在所有应用程序中复制类(模型,插件等).另外:运行4个应用程序意味着由于加载了4个独立的Rails堆栈,您将有4个进程全部消耗内存.
将其编译为一个应用程序可以消除此问题.对于销售站点和用户站点之间的问题,必须具有可以解决的根,如前所述,由subdomain_fu.让我展开一些来自我的应用程序的示例代码:
map.with_options :conditions => {:subdomain => 'logs'} do |admin|
admin.resources :channels do |channel|
channel.resources :logs
end
map.root :channels
map.connect ':id', :controller => "channels", :action => "show"
end
Run Code Online (Sandbox Code Playgroud)
我们在这里看到,在:conditions该with_options方法将:subdomain成为logs这意味着什么进来的logs.mysite.com 将fufill这些条件,因此被路由这种方式.
现在进一步在这个路由文件中,我将所有其他内容包含在一个类似的块中:
map.with_options :conditions => {:subdomain => nil} do |admin|
# shebang!
end
Run Code Online (Sandbox Code Playgroud)
去mysite.com的一切都会去这些路线.
最后,将它全部编译成一个超级超级应用程序将消除数据库共享问题.
| 归档时间: |
|
| 查看次数: |
3585 次 |
| 最近记录: |