如何通过cron运行rake任务?

时间:2016-07-01 06:20:31

标签: ruby-on-rails ruby cron rake ruby-on-rails-5

我有一个应用程序和一个rake任务,我将在一小时内由cron执行一次。但问题是该任务使用rails环境和我的rails应用程序的某些类。如果我将它作为ruby脚本运行,我将不得不包含它使用的所有依赖项,我认为不可能以一种简单的方式正确地执行它。因此,我必须将其作为rake任务运行,因为它会保留所有依赖项,对吧?那么如何从cron运行rake任务?

请注意,如果没有必要,我不想使用任何第三方解决方案,在这种情况下,我不想在任何时候使用gem。

3 个答案:

答案 0 :(得分:13)

您可以在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

请在bundle exec命令之前注意rake 使用bundler确保您的任务将获取正确的环境。

指定RAILS_ENV即可

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

答案 1 :(得分:2)

随时使用以简化您的生活https://github.com/javan/whenever;)

答案 2 :(得分:0)

这是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根目录运行任务。