我正在运行Ruby on Rails 3,我有一个使用命名空间的应用程序,以处理更多“内部概念”。对于“内部概念”,我的意思是每个命名空间用于处理我的应用程序的特定资源。例如,命名空间是“用户”,它用于处理用户的会话和授权,另一个是“博客”,它用于处理所有关于帖子和评论。
我认为这是一个“方便”的解决方案,可以避免很多问题,但不是最好的。
此时我的RoR应用程序包含此文件系统结构:
# "users" and "blogs" are namespaces
RAILS_ROOT/app/controllers/users
RAILS_ROOT/app/controllers/blogs
RAILS_ROOT/app/models/users
RAILS_ROOT/app/models/blogs
RAILS_ROOT/app/views/users
RAILS_ROOT/app/views/blogs
...
我想在两个使用子域的RoR应用程序中切换“users”和“blogs”命名空间,如下所示:
http://main.com # This is the main RoR application
http://users.main.com # This is another RoR application used to handle users
http://blogs.main.com # This is another RoR application used to handle blogs
简而言之,我认为我正在尝试扩展 *我的应用程序,或者可能为每个RoR应用程序创建 Webservice ,但我的问题是:
1.
我可能会遇到哪些问题?
我注意到在应用程序之间维护会话(在我的情况下我处理带有cookie的会话)的问题,但我认为这不是唯一的问题。
2.
如何在我的案例中处理三个RoR应用程序之间的通信?
我注意到我可以使用 ActiveResource 来共享信息,但我必须注意用户身份验证等信息。
我必须实施OpenID / Oauth协议才能维护用户身份验证吗?
如果通讯是在子域之间,我认为我必须确保使用HTTPS连接的用户身份验证信息。 是真的吗?
3.
如何整理我的工作和资源?
说了这么多,我不想使用(绝对)插件或宝石,但是,如果我需要,我想实现我自己的处理程序。
最后,我想拥有3个RoR “easy”和分离应用程序,而不会在每个应用程序中使用名称空间,并且可以相互通信:
# "Main" application for http://main.com
ROOT_MAIN/app/controllers/
ROOT_MAIN/app/models/
ROOT_MAIN/app/views/users
...
# "Users" application for http://users.main.com
ROOT_USERS/app/controllers/
ROOT_USERS/app/models/
ROOT_USERS/app/views/users
...
# "Blogs" application for http://blogs.main.com
ROOT_BLOGS/app/controllers/
ROOT_BLOGS/app/models/
ROOT_BLOGS/app/views/users
...
BTW :我正在使用名称空间的好方法吗?
P.S。:如果您需要其他信息,请告诉我,我会更新问题。
*来自The O2 Software Process:“横向扩展”是指向现有园区添加更多服务器的概念,而不是“向上扩展”,这意味着用更新(更快)替换现有(慢速)服务器服务器
答案 0 :(得分:2)
你的问题比你想象的要简单得多。这一切都取决于你如何处理你的路线。
Ruby On Rails 3对子域有更好的支持。因此,您无需将它们分成三个/更多RoR应用程序。您可以将所有代码放在一个RoR应用程序中。并将user.abc.com重定向到任何控制器,如“users / sessions”,将blog.abc.com重定向到“blogs / blogs”控制器。命名空间在像您这样的应用程序中非常方便,它们可以让您的工作快速地以不同的文件夹和路径格式分离应用程序的上下文不同部分。
尝试命名空间到你的内心,我相信你不会得到你现在想象的任何错误。我建议你为它编写代码,如果你遇到问题就来这里。
答案 1 :(得分:1)
您的应用真的那么大,您需要使用多个应用来处理不同的问题吗?可能是你的帖子只是缺乏足够的细节来传达你正在做的事情的真实程度,但似乎你正在尝试模块化一个足够小的应用程序,如果你没有“缩小”就可以了。或许我只是错过了一些东西?
我认为这将是一个棘手的问题,但可能有一些方法将会话数据存储在数据库中,并以您处理#2的方式共享它,或者您必须为自定义解决方案滚动那。我认为最大的问题是在您的应用程序中共享资源,而且如果您将用户管理分解为自己的应用程序,则需要实现自己的OpenID / Oauth。 This post使用Devise / OAuth对此进行了描述。
您可以使用activeresource连接到每个应用程序各自的rest api。 This post描述了一个人通过rails应用程序共享数据的解决方案。
这个问题有些模糊。您描述了使用多个应用程序来区分您的关注点(博客与用户管理),因此我想您将在每个应用程序的根目录中拥有您的资源而不需要任何命名空间,就像您在现有应用程序中已经完成的那样。
现在,为了对您的整个问题做出更一般的回复,最近我在Rails上阅读了关于数据,上下文和交互blog post的(wikipedia article),我认为这可能是一个更好的解决方案如果你觉得你的应用程序失控,那就试着去完成。
答案 2 :(得分:0)
很抱歉这么晚回答。 实际上,如果你想扩展你的rails应用程序你不需要为每个单元创建不同的应用程序(我的意思是你试图在这里分离用户和博客),你在推广应用程序的过程中领先一步你应该首先把所有单独的单元作为可安装引擎,并将它们作为核心应用程序中的宝石并将它们安装在您的核心应用程序路径中。在您的情况下,博客可以移动到单独的可安装引擎。如果将来您需要扩展更多,那么您可以进一步使用引擎作为单独的应用程序。这是一个视频的链接,可以让你知道我想在这里解释什么https://www.youtube.com/watch?v=pm94BsoMGik