2015-08-24 97 views
0

我需要通過我通常使用rails config gem訪問的值來隨時生成一些我隨時生成的cron任務的參數化。所以我想這樣做:當我嘗試這樣做,我得到每當運行時運行rails環境

every 2.hours do 
    execute 'my/command/with/parameter #{Settings.parameter}' 
end 

config/schedule.rb:14:in `initialize': uninitialized constant Whenever::JobList::Settings (NameError) 

所以,我的結論是whenever不會在Rails環境,這是一種恥辱,因爲運行我想用它做一些更酷的東西(例如,在運行rake db:seed之後,根據數據庫狀態安排一些東西)。有什麼辦法讓whenever在Rails上下文中運行?

回答

0

Rails附帶「runner」,它允許非web堆棧腳本訪問Rails應用程序的環境和配置。它是爲這種任務量身定做的。

+0

我知道runner,但只看到它用在代表ruby代碼的字符串上下文中。即'bin/rails runner'MyMode.long_running_task'就像你鏈接的例子。我試着執行'bin/rails runner'時沒有任何效果,有沒有辦法將它指向腳本而不是一串代碼? – Imran

+0

當然有一點使用腳本。該腳本繼承了所有Rails配置,因此它可以訪問數據庫而無需啓動整個Rails堆棧。我用它來編寫例程來抓取數據並將數據庫更新爲cron作業。看到http://stackoverflow.com/q/11037753/128421 –

+0

我認爲你誤解了我。我知道這有一點意義,這正是我想要在這裏實現的!好的,所以,我看到我可以將第三個參數設置爲一個文件路徑,並且會在rails環境中執行.rb文件,非常棒。 但是這個例子稍微複雜一點,我想從第三部分gem'whatever'運行一個特定的ruby腳本。這確實有些神奇,並且最終會調用我的config/schedule.rb文件,即使我運行 'bin/rails runner'bundle exec只要有一次' 當我到達我的文件時,上下文已經消失。因此,這個問題。 – Imran