如何通过cron运行rake任务?

4 ruby cron rake ruby-on-rails ruby-on-rails-5

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

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

Ale*_*sey 14

你可以添加你的crontab之类的东西

0 * * * * /bin/bash -l -c 'cd /path/to/your/project && bundle exec rake foo:bar >> log/cron.log 2>&1'
Run Code Online (Sandbox Code Playgroud)

这将运行foo:bar任务,每隔一小时,写stdoutstderrlog/cron.log.

bundle execrake命令之前注意.
使用bundler确保您的任务将获取正确的环境.

要指定RAILS_ENV你可以做到

... && RAILS_ENV=production bundle exec rake foo:bar
Run Code Online (Sandbox Code Playgroud)


max*_*ner 2

这是 rake 任务的示例:

task :foo => :environment do
  puts "Running rake task in environment: #{Rails.env}"
  # can access Models here or whatever
end
Run Code Online (Sandbox Code Playgroud)

请注意,该=> :environment部分是可选的,但它使您的 Rails 环境成为任务块。

您可以放入rake run_my_task您的 cron 作业。

您可能需要使用类似的方法cd /home/$USER/my_rails app && rake run_my_task来确保 cron 从 Rails 根目录运行任务。