2011-06-24 63 views
20

如何將我開發的Forum application轉換爲Rails引擎,以便它可以嵌入到其他應用程序中?如何將現有的Rails 3應用程序轉換爲引擎?

應該添加,保留或刪除什麼?我應該提供一種整合模型的方法嗎?我如何設置路線和用戶配置?我如何將它打包成一個寶石?我應該注意什麼?


閱讀的文章和文件後,我設法縮小我的問題:

  • 我應該命名空間中的模型?也就是說,我應該將它們放在我的引擎模塊和app/models/engine文件夾中嗎?
  • config中應該保留哪些配置文件?
  • 那麼public文件夾呢?在Rails 3.1中,樣式表和JavaScripts被移動到app/assets文件夾中,解決了這個問題,但是如何在Rails 3.0中實現相同的效果呢?

回答

9

這裏有太多的問題要正確回答它們。這是通過挖掘並試用它來爲你帶來回報的事情之一。隨着您深入瞭解,請回過頭來提出新的具體問題。

這是我最近在做這些時使用的一些資源。

在大多數情況下,你可以在你的應用程序目錄下的東西他們在哪裏。您還應該能夠將routes.rb保存在config目錄中,但是如果某些路由與應用的路由相沖突,則可能會出現一些陷阱。

您可能希望創建一個generator以創建具有引擎所需的所有表的遷移。可以創建其他生成器來覆蓋默認視圖和那種事情。

請創建一個使用您的寶石的測試應用程序。你遇到的許多問題都是確保你正確地加載引擎的依賴關係。當你正在開發中,編輯您的測試應用程序的Gemfile中直指向你的寶石的來源......是這樣的:

gem 'my-forum', :path => '~/work/my-forum' 

命名空間

你至少應該命名錶/模型,所以你不會碰到命名衝突。看看你當前的論壇應用程序,我至少會在'forum_'前加上你所有的表格。例如,使用您的引擎的人很可能會有不同的型號,例如Category ...因此ForumCategory將是更好的選擇。

絕對命名空間您在lib目錄中創建的任何類。

配置文件

你要保持你的routes.rb config目錄。你也可能需要保留你的初始化器。任何應用程序特定的東西都可能需要移到其他地方。

公共文件

使用Rails 3.0.x,則可以保留樣式表和JavaScript的公共目錄。我認爲有一些代碼需要添加到您的Engine類中...

initializer "static assets" do |app| 
    app.middleware.use ::ActionDispatch::Static, "#{root}/public" 
end 
+0

謝謝!經過研究和嘗試,我確實設法縮小了我的問題清單。但是,有些東西我還沒有想出來。更新我的問題,請看看。 –

+0

我做了一些補充,但是如果你需要更多的細節,你應該真的開始一個關於堆棧溢出的新問題。 –

相關問題