2011-02-12 61 views
4

我正在运行Ruby on Rails 3,我有一个应用程序使用命名空间来处理更多的“内部概念”。对于“内部概念”,我的意思是每个名称空间都用于处理我的应用程序的特定资源。例如,名称空间是“用户”,它用于处理用户的会话和授权,另一个是“博客”,它用于处理关于帖子和评论的所有内容。扩展:如何处理Ruby on Rails应用程序之间的通信?

我认为这是一个“方便”的解决方案,以避免很多问题,但不是最好的。

这时我的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 
... 

我想用子域有类似切换“用户”和“博客”命名空间有两种回报率的应用这样的:

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 

在几句话,我想我试图向外扩展 *我的应用程序或可能创建一个Webservice的为每个RoR应用程序,但我的问题是:

1.我可能遇到什么问题?

我注意到应用程序之间维护会话(在我的情况下,我处理这些与cookie)的问题,但我认为这不是唯一的一个问题。

2.如何在我的情况下处理三个RoR应用程序之间的通信?

我注意到我可以使用ActiveResource来共享信息,但我必须注意诸如用户认证等信息。

  1. 我必须实施OpenID/Oauth协议才能维护用户身份验证吗?

  2. 我想我必须确保与HTTPS连接另外,如果交际是子域之间的用户认证信息。 这是真的吗?

3.如何安排我的工作和资源?

与所有他这样说,我想不要使用绝对插件或宝石,但是,如果我需要,我想实现我自己的处理程序

最后我想有3 RoR的“容易”,并分离应用,而不使用命名空间在它们中的每并且可以在彼此之间进行通信:

# "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:“向外扩展”是指添加更多的服务器到现有公园的概念,而不是“升级”,这意味着与更新的版本来替换现有的(缓慢)服务器(和更快)服务器。

+1

使用Ruby和Rails进行面向服务的设计可能对你有用http:// www .amazon.com/Service-Oriented-Design-Rails-Addison-Wesley-Professional/dp/0321659368/ref = sr_1_1?ie = UTF8&qid = 1297533429&sr = 8-1 – 2011-02-12 17:58:43

+0

如你所知,这本书好吗? – user502052 2011-02-12 18:20:15

回答

1

您的应用真的太大了,您需要使用多个应用来处理不同的问题?这可能是因为你的文章缺乏足够的细节来传达你正在做的事情的真实程度,但似乎你正在试图模块化一个足够小的应用程序,以至于没有像你说的那样“扩展”就没问题。或者,我只是想念一些东西?

  1. 我认为这将是一个棘手的问题,但可能会有一些方法来存储在数据库中的会话数据,要么分享你处理#2的方式,或者你将不得不推出定制解决方案为了那个原因。我认为最大的问题将是跨应用程序共享资源,而且如果您将用户管理分解到自己的应用程序中,则需要实施自己的OpenID/Oauth。 This post用Devise/OAuth描述了这一点。

  2. 您可以使用主动资源连接到每个应用程序各自的休息api。 This post描述了一个人跨轨应用共享数据的解决方案。

  3. 这个问题有些含糊。你描述过使用多个应用程序来分隔你的顾虑(博客或用户管理),所以我想你会在每个应用程序的根目录下没有任何命名空间的资源,就像你已经在现有应用程序中完成的那样。

现在对于你的整个问题,更广泛的响应,最近我阅读了有关数据,上下文和交互(wikipedia article) on Rails的一个blog post,我想这可能是你所要完成的,如果有什么更好的解决办法你觉得你的应用程序正在失控。

2

你的问题比你想象的要简单得多。这一切都取决于你如何处理你的路线。

Ruby On Rails 3更好地支持Subdomains。所以,你不需要将它们分成三个或更多的RoR应用程序。您可以将所有代码放在一个RoR应用程序中。并将user.abc.com重定向到任何控制器(如“用户/会话”),将blog.abc.com重定向到“blogs/blogs”控制器。命名空间在您的应用中非常方便,它们使您的工作能够非常快速地以不同的文件夹和路由格式分离应用的上下文不同部分。

尝试命名空间到你心中的内容,我相信你不会得到任何你现在想象的错误。如果你遇到问题,我建议你为它编写代码并来到这里。

0

很抱歉回答迟到。 其实如果你想扩展你的rails应用程序,你不需要为每个单元创建不同的应用程序(我的意思是你试图在这里分离出用户和博客),你在应用程序扩展的过程中前进了一步,你应该首先将所有单个单元作为可挂载引擎,并将它们作为核心应用程序中的宝石,并将它们安装到核心应用程序路线中。在您的案例中,博客可移动到单独的可挂载引擎。如果将来您需要扩展更多,则您可以进一步使用引擎作为单独的应用程序。这里有一个链接到一个视频,可能让你知道我想在这里解释什么https://www.youtube.com/watch?v=pm94BsoMGik

相关问题