2011-08-16 84 views
2

假設性的問題(目前!)Rails應用程序與非HTTP訪問

假設我有一個應用程序一個好主意。它使用關係數據庫中的表格很好地表示數據,並使用表示這些表格的互連對象。它支持定義良好的API,用於與(創建,讀取,更新,刪除)這些對象進行交互,並查看關於它們的信息。

簡而言之,這是一個完美的適合Rails ...除了它不想成爲一個Web應用程序。也許它需要命令行界面;或一個OS本機基於對話框的界面;或者也許它想將自己作爲資源展示給其他應用程序。無論如何 - 它只是沒有被設計爲通過HTTP呈現自己。

Thesequestions暗示這肯定是可能的,但是從適應現有web-app的角度來看,這兩個問題都有一個額外的非web界面。

我很想知道什麼是創建這樣的應用程序的最佳途徑。你最好是rails new non_web_app,爲了獲得「免費」構建的骨架,然後編寫一些「正常」的Ruby代碼require s config/environment - 但是,然後你有很多網絡中心cruft,你不需要?或者最好是捲起袖子並用整塊布做成,只需要你需要的庫並手動編寫任何所需的配置?

如果是後者,究竟是什麼需要製作一個Rails應用程序,但沒有web位?

回答

4

如果您想訪問Rails ORM來開發一個CRUD非Web應用程序,只需在您自己的Ruby腳本中包含ActiveRecord;您將避免使用大量您可能不需要的Rails模塊(路由,模板生成器,...)Here is an example of how to do it

如果您希望擁有完整的Rails堆棧,請不要在應用程序服務器(WEBrick,Passenger,Mongrel等)中運行Rails Web應用程序以避免任何HTTP暴露,並使用任務與應用程序交互或軌道控制檯。

+0

「只要包含ActiveRecord」 - 足夠公平,但它至少也需要配置數據庫詳細信息。基本上,需要什麼來引導基於AR的CRUD應用程序,如果不是從「開始使用Rails和剝離位」路線開始的話? – Chowlett

+0

請檢查答案中現在包含的鏈接。 – lbz

+0

啊,謝謝,這確實解釋了它。非常簡單,真的。 – Chowlett

0

我會避免把Rails放在離軌太遠的地方。如果我是這樣做的,認爲軌的增益W/O網絡的東西我會做到以下幾點:

rails new non_web_app 

,並忽略webbish克魯夫特和使用的軌道,從而生成模型。通過這種方式,您可以獲得緊湊舒適的數據庫行爲,並可以根據需要添加各種寶石,從而擴充這些模型。當然,我不打擾實現視圖,我會考慮實現控制器,其中各種渲染位被刪除,並使用您實例化控制器的實例並直接調用操作。這意味着控制器仍將您的API代表到業務邏輯中,但它現在「呈現」的「視圖」僅僅是數據輸出的返回。

然後,你可以簡單地去掉你不需要的位......公共目錄,應用程序下的視圖結構,config/routes.rb等等。你需要逐步測試這些變化,並確保刪除一些現在無關的位並不會導致Rails世界陷入混亂。

0

Rails適用於Web應用程序。這意味着HTTP。現在,您可以打包一個Web應用程序,以便它可以在桌面上運行,或者您可以將ActiveRecord與類似Monkeybars的桌面應用程序框架一起使用。