2011-07-20 66 views
5

我有兩個Rails應用程序(使用rails 3.0.7),稱它們爲「blog」和「auth」。我想從「博客」中掛載「auth」,這樣我就可以運行「博客」應用程序,並將某些請求路由到「auth」應用程序。如何將現有的Rails應用程序嵌入/裝載到另一個Rails應用程序中?

看來我需要嵌入或可能創建一個「引擎」,但我不是100%確定哪個是正確的。

如何在「博客」應用程序中嵌入「auth」應用程序?

+2

創建引擎是繼續進行的方式。 – apneadiving

回答

0

如果auth應用程序類似於web服務(例如Facebook身份驗證),那麼只需保持2個應用程序運行並通過一個應用程序使用urls向另一個應用程序發出請求。

如果這些應用程序共享一些邏輯或相同的數據庫,您可以合併代碼,以便兩個應用程序成爲一個,或者您可以使'auth'應用程序像gem或插件一樣並在您的博客中使用'app。

+0

「只保留2個應用程序運行,並通過一個應用程序向另一個應用程序發送請求。」那麼從客戶端向另一個應用程序發出請求?最初的計劃是讓「博客」應用程序的客戶端向「auth」應用程序發出請求(使用ajax),但這需要使用只允許GET的JSONP。我需要訪問的一些服務需要POST,DELETE,PUT等。 – codecraig

+0

如果您要將一個Rails應用程序調用到另一個使用活動資源。 http://railscasts.com/episodes/94-activeresource-basics – lukemh

1

Rails3是一個基於機架的應用程序。 Rackmiddleware已經有一些默認的內置應用程序。嘗試運行捆綁執行耙中間件。您可以將自定義Rack應用程序添加到堆棧中。使用this博客帖子查看它是如何工作的。

+0

我已經看過那篇文章,但我仍然想知道,如何讓我的「博客」應用程序需要「auth」應用程序?這不像「auth」rails應用程序是一個寶石,我可以在我的「博客」應用程序中添加到Gemfile中。 – codecraig

+0

我不明白,您是否需要將驗證添加到您的應用程序中? – Anatoly

+0

我有一個名爲'auth'的rails應用程序,提供身份驗證。我希望我的「博客」rails應用程序的客戶端代碼能夠通過「auth」應用程序進行GET/POST等。我無法直接從JSONP的'博客'客戶端b/c中的JavaScript代碼(只有GET的工作)做到這一點。我想從「博客」應用程序中安裝「auth」應用程序,以便我可以訪問auth。來自客戶端代碼的東西。那有意義嗎? 現在我認爲我的主要問題是,如何獲得由「博客」應用程序裝載的「auth」應用程序?我不能像這樣的博客文章建議b/c掛載auth應用程序不在博客應用程序的加載路徑。 – codecraig

2

如果您試圖在一個Ruby實例中定義兩個Rails應用程序,但它在this提交後發生了更改,Rails正在提高RuntimeError: You cannot have more than one Rails::Application

這在4.0.0中仍未發佈,但會包含在較新的版本中。 (>4.1.0.β)

檢查出the discussion on PR欲知更多信息。


從我的理解,你可能不需要有兩個Rails應用程序,但。您應該嘗試從Rails::Engine中提取所需的功能。

Remember, Rails::Application is also a Rails::Engine.

你可以找到一個關於如何做到這一點在網絡上大量的材料,我會建議thesetwo讓你開始。

2

您可以爲'auth'應用程序創建「rails-engine」,然後將此引擎掛載到rails應用程序中,即'blog'應用程序。

瞭解更多關於的Rails ::引擎在下面的鏈接 -

http://guides.rubyonrails.org/engines.html

http://api.rubyonrails.org/classes/Rails/Engine.html

要嵌入滑軌安裝發動機到Rails應用程序,請執行以下常規步驟 -

1 )打開需要嵌入引擎的目標Rails項目。

2)打開用於編輯的Gemfile,並添加以下行:

gem '<engine name>', :path => "<absolute path to the Rails mountable engine project>" 

3)打開用於編輯配置/路由。rb,並添加以下行:

mount <engine name>::Engine, :at => "/<engine name>" 
相關問題