2011-02-12 60 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

相關問題