簡體   English   中英

我有一個Rails任務:我應該使用script / runner還是rake?

[英]I have a Rails task: should I use script/runner or rake?

對於臨時 Rails任務,我們有一些實現替代方案,其中主要似乎是:

script/runner some_useful_thing

和:

rake some:other_useful_thing

我更喜歡哪個選項? 如果有一個明顯的喜歡那么,如果有的話,我應該考慮使用另一個? 如果從來沒有,那么為什么你認為它仍然存在於沒有棄用警告的框架中?

它們之間的區別在於script/runner引導Rails而Rake任務沒有,除非你通過使任務依賴於:environment來告訴它,如下所示:

task :some_useful_task => :environment do
  # do some useful task
end

由於啟動Rails很昂貴,如果可以避免它,可能值得跳過。

除此之外,它們大致相同。 我使用兩者,但最近我使用script/runner分別執行腳本更多。

FWIW似乎有一些動作遠離使用腳本運行器而不是 rake:

更新(2009年4月25日):我建議使用rake任務而不是腳本/運行器來執行重復任務。

此外, 根據這篇文章,您可以使用rake進行重復性任務就好了:

如果我希望這個在午夜時分在我的生產數據庫上運行,我可能會寫一個看起來像這樣的cronjob:

0 0 * * * cd / var / www / apps / rails_app / && / usr / local / bin / rake RAILS_ENV = production utils:send_expire_soon_emails

至少可以說,將參數傳遞給rake任務是一個痛苦的屁股。 您需要求助於環境變量或非常討厭的參數系統,這些參數系統不直觀並且有很多警告。

如果您的任務需要優雅地處理命令行參數,那么編寫腳本是可行的方法。

Luke Francl提到腳本/跑者啟動Rails。 確實如此。 但是,如果您不想啟動rails,那么只需按原樣運行腳本,而不使用script / runner。 因此,腳本和rake任務之間唯一真正的區別在於它們的美學。 選擇適合自己的感覺。

我使用rake任務執行小任務(一行或兩行)。 更復雜的東西進入腳本/目錄。 如果我認為其他開發人員希望代碼在一個地方生活在另一個地方,我會打破這個規則。

根據評論2進行更正。 給他們業力!

FWIW - Rails 3.0+更改了在獨立腳本中初始化Rails系統的方式。

require File.dirname(__FILE__) + '/config/environment'

如上所述,您還可以:

rails runner script/<script name>

或者將所有代碼放在Rake任務中,但是我有很多來自Rails 2的遺留代碼; 所以我不想馬上走那條路。

每個都有其優點和缺點。

我做的一件事就是編寫普通的ruby腳本並將它們放在script/maintenance目錄中。

您需要做的就是加載rails並訪問所有模型等,在文件頂部放置require '../../config/environment.rb' ,然后就可以了。

在Rails 3.0+中, config/environment.rb需要config/application.rb ,它需要config/boot.rb

因此,要在Rails 3中加載應用程序,您仍然只需要environment.rb

對於一個關閉命令腳本/跑步者可以沒問題。 對於任何重復的事情,從長遠來看,rake任務更容易,如果你忘了它的作用,它會有一個摘要。

我得到的印象腳本/跑步者主要是為了定期任務。 例如,運行的cron作業:

SomeClass.update_from_web('http://www.sourcefordata.gov/')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM