[英]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
任務並將stdout
和stderr
寫入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.