簡體   English   中英

如何通過cron運行rake任務?

[英]How can I run a rake task via cron?

我有和rails應用程序和一個rake任務,我將在一小時內由cron執行一次。 但問題是該任務使用rails環境和我的rails應用程序的某些類。 如果我將它作為ruby腳本運行,我將必須包含它使用的所有依賴項,我認為不可能以一種簡單的方式正確地執行它。 所以我必須將它作為rake任務運行,因為它將保留所有依賴項,對吧? 那我怎么能從cron運行rake任務呢?

請注意,在沒有必要的情況下,我不想使用任何第三方解決方案,在這種情況下,我不想在任何時候使用gem。

你可以添加你的crontab之類的東西

0 * * * * /bin/bash -l -c 'cd /path/to/your/project && bundle exec rake foo:bar >> log/cron.log 2>&1'

這將每小時運行foo:bar任務並將stdoutstderr寫入log/cron.log

rake命令之前請注意bundle exec
使用bundler確保您的任務將獲取正確的環境。

要指定RAILS_ENV您可以這樣做

... && RAILS_ENV=production bundle exec rake foo:bar

隨時使用以簡化您的生活https://github.com/javan/whenever ;)

以下是rake任務的示例:

task :foo => :environment do
  puts "Running rake task in environment: #{Rails.env}"
  # can access Models here or whatever
end

請注意, => :environment部分是可選的,但是它使您的Rails環境成為任務塊的原因。

你可以把rake run_my_task放在你的cron作業中。

您可能需要使用cd /home/$USER/my_rails app && rake run_my_task來確保cron從Rails根目錄運行任務。

暫無
暫無

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

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