【发布时间】:2011-02-12 16:56:29
【问题描述】:
我正在运行 Ruby on Rails 3,并且我有一个使用命名空间来处理更多“内部概念”的应用程序。对于“内部概念”,我的意思是每个命名空间都用于处理我的应用程序的特定资源。例如,命名空间是“users”,用于处理用户的会话和授权,另一个命名空间是“blogs”,用于处理所有关于帖子和 cmets 的信息。
我认为这是避免很多问题的“方便”解决方案,但不是最好的。
此时我的 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 应用程序中切换“用户”和“博客”命名空间,使其具有如下内容:
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
简而言之,我想我正在尝试 Scale Out* 我的应用程序,或者可能为每个 RoR 应用程序创建一个 Webservice,但我的问题是:
1. 我可能会遇到什么问题?
我注意到有关在应用程序之间维护会话(在我的情况下我使用 cookie 处理会话)的问题,但我认为这不是唯一的问题。
2. 在我的案例中如何处理三个 RoR 应用程序之间的通信?
我注意到我可以使用ActiveResource来共享信息,但我必须注意用户身份验证等信息。
我必须实现 OpenID/Oauth 协议才能维护用户身份验证?
如果通信是在子域之间,我想我也必须通过 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
...
顺便说一句:我正在做的命名空间的使用是一种好方法吗?
P.S.:如果您需要其他信息,请告诉我,我会更新问题。
*来自The O2 Software Process:“Scale Out”是指向现有公园添加更多服务器的概念,而不是“Scale Up”,后者意味着用更新(和更快)的服务器替换现有(慢)服务器。
【问题讨论】:
-
使用 Ruby 和 Rails 的面向服务的设计可能对您有用amazon.com/…
-
如你所知,那本书好吗?
-
我阅读了介绍,但它使用了插件和宝石(见问题)。
标签: ruby-on-rails ruby ruby-on-rails-3 communication subdomain