2010-02-24 22 views
4

很難從這個概念的各種搜索中獲得任何有用的結果 - 可能是因爲它是一個。錯誤和/或b。朦朧。本質上,雖然,我想編寫一個應用程序,它既可以作爲普通的web應用程序,也可以作爲命令行界面。我在古代已經使用Perl爲sysadmin-y做了這些工作,但是沒有使用Ruby/Rails帶來的樂趣。在Rails MVC中基於CLI的「V」?

我對Rails本身非常滿意,並且還對所有CLI方式使用了獨立的Ruby。我在尋找的是最佳實踐,如果它們存在的話,那就是將Rails應用程序擴展爲具有CLI功能。

也許答案就像使用script/runner一樣簡單,並在使用我的Rails模型時做我自己的「VC」......這就是我計劃要做的事情,但我認爲我會退後一步,首先檢查該方法。我很難想象如何利用任何Rails控制器的東西,因爲它與HTTP請求緊密結合在一起,但我常常爲聰明的(呃)人提供了什麼。

感謝您的任何有用的迴應。

回答

1

我認爲這一切都取決於您是否要重用您的控制器邏輯。如果你這樣做,那麼你可以沿着寫一個gem/Rake任務/獨立Ruby腳本的路線,嚮應用程序發出HTTP請求,並以JSON/XML /純文本或其他方式接收響應。像HTTParty這樣的東西是理想的。

第二種方法如您所描述:直接從您自己的腳本驅動您的Rails模型並顯示結果。

+0

是的,我忘了說我已經完成了你所描述的(CLI util使用ActiveResource與我的Rails應用程序交談)。現在正在製作中,但經過一年左右的生活,我相當確信這是做錯的方法。簡單的請求是可以的,但是有很多複雜的東西在客戶端完成,這實際上不應該是這樣。感謝您的迴應。 – mjmac 2010-02-24 15:01:04

0

另一種方法是,Web界面向CLI發送任何內容。所有值得做的事情都在CLI中進行,Web只需調用CLI即可滿足其所有需求。

脫殼有點貴。如果事實證明會損害性能,請使用popen在每個Web會話中僅加載一次CLI。然後你可以給它提供命令(通過popen管道寫入它的stdin)並獲得結果(通過popen管道從stdout中讀取),而不必爲每個命令加載CLI。如果CLI是「我接受一些參數,執行某些操作並退出」排序,然後爲其添加一個新模式「--stay-resident」或某些方式,將其切換爲Web界面所需的行爲。

+0

這可能適用於非常簡單的應用程序,也許。不過,我想要擴展的應用程序在Rails圖層中有很多。從網絡驅動CLI可能會導致很多重複功能,並且還會遇到一些棘手的安全問題。 – mjmac 2010-02-24 15:08:09

+0

您正在修改現有的rails應用程序嗎?這確實改變了事情。我有同樣的工作要做。爲了避免重複,我只是將所有「做某事」的代碼從rails導入到CLI中。正如你所說,這對你並不好。 – 2010-02-24 15:19:59