2012-08-25 36 views
8

是否有可能使用cron(通過每當gem)直接在可安裝的引擎模型上運行任務。我認爲cron無法從主應用程序開始,因爲可安裝的引擎應該是孤立的。可裝載的引擎與cron(每當寶石)

我可以在正常的Rails應用程序中使用它,它工作的很好,但我需要以引擎樣式的方式運行任務。

謝謝

回答

3

您不能自己採取Rails Engine並直接執行任務,例如Rake任務或調用模型。將Rails引擎想象成迷你Rails應用程序。它爲安裝的父級Rails應用程序提供了功能和特性。發動機本身是不完整的。通過將引擎安裝到Rails應用程序,它可以訪問啓動並正確運行所需的所有配置和初始化程序。

裝載引擎的Rake任務被繼承到父Rails應用程序中。執行後續應該包括Rake任務列表從發動機

rake -T 

Rails runner,您可以執行安裝Rails的引擎的車型,庫等,以及。訪問引擎的功能時,必須使用引擎的名稱空間。下面是從Rails Guide從一個引擎訪問模型的例子:

Blorgh::Post.find(1) 
+0

我還是比較新的軌道的發動機和安裝發動機,所以這是一個學習的過程。因此,從您提到的內容中可以看出,我可以直接在引擎模型上運行cron,但執行需要從主機應用程序啓動。被隔離,我認爲可掛載的引擎就是這樣,黑盒子,但從你提到的我試了一下,它對我來說真的很好。我會正確地標記這個問題,因爲它已經正確地解決了我的rails引擎問題,並讓我對引擎有了更多的瞭解。 – pieterk

0

Rails的設計者絕對不希望它成爲可能。每當依賴rails的runner腳本時,不支持mountable插件(出於很好的理由 - 沒有應用程序可以與runner一起運行)。也許可以通過配置每次使用不同的ruby執行器(rails console,IRB等)來找到其他方式來執行代碼,但這可能會產生意想不到的結果,因爲它不在應用程序的上下文中,因此您可以沒有配置或環境。

但是,您聲明:The cron I think would not be able to start from the main app since mountable engines are supposed to be isolated,但我測試了它,情況並非如此。只要您適當地爲runner任務命名空間,您的應用程序的每當config文件將在插件代碼中找到適當的任務並且能夠執行它。請讓我知道,如果由於某種原因,不適合您的特殊需求。