每当gem时都运行rails,仅在满足特定条件时运行命令。

Sah*_*har 5 cron ruby-on-rails whenever

我们在我们的项目中使用带轨道的宝石。我了解我们可以使用每当gem这样的时间来调度命令。

every 1.day, :at => '6:00 am' do
  command "echo 'hello'"
end
Run Code Online (Sandbox Code Playgroud)

但是我的问题是我只想在满足某些条件时才执行此命令。这样的事情。

every 1.day, :at => '6:00 am' do
 if User.any_new_user? 
  command "echo 'hello'"
 end
end
Run Code Online (Sandbox Code Playgroud)

我们如何通过everyth和rails实现这一目标?我能想到的一种可能的解决方案是,我为此创建一个跑步者并检查那里的状况。

every 1.day, :at => '6:00 am' do
  runner "User.say_conditional_hello"
end
Run Code Online (Sandbox Code Playgroud)

在我的用户模型中:

def self.say_conditional_hello
    `echo "Hello"`
end  
Run Code Online (Sandbox Code Playgroud)

关于此方法或任何新方法的任何建议将非常有帮助。

提前致谢!。

Msh*_*hka 2

如果你想只想在条件为真时安排任务,那么我认为您不可能安排任务,然后在运行任务时,代码可以决定是否应该运行它,具体取决于您的状况

我能想到的一个可能的解决方案是我为此创建一个跑步者并检查那里的条件。例如:

是的,这是处理这个问题的一种方法,但是在我看来,使用每当时的最佳行为是创建一个 rake 任务来检查条件然后执行代码或执行您的工作

就像是:

耙子任务

namespace :user do
  desc "description"
  task check_for_new: :environment do
    if User.any_new_user? 
      # code
    end
  end
end 
Run Code Online (Sandbox Code Playgroud)

在你的schedule.rb文件中

every 1.day, :at => '6:00 am' do
  rake "user:check_for_new"
end
Run Code Online (Sandbox Code Playgroud)