5

我们在项目中使用带有导轨的 gem。我知道我们可以使用这样的 gem 来安排命令。

every 1.day, :at => '6:00 am' do
  command "echo 'hello'"
end

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

every 1.day, :at => '6:00 am' do
 if User.any_new_user? 
  command "echo 'hello'"
 end
end

我们如何使用when 和rails 来实现这一点?我能想到的一种可能的解决方案是我为此创建一个跑步者并在那里检查该条件。类似于:

every 1.day, :at => '6:00 am' do
  runner "User.say_conditional_hello"
end

在我的用户模型中:

def self.say_conditional_hello
    `echo "Hello"`
end  

关于这种方法或任何新方法的任何建议都会非常有帮助。

提前致谢!。

4

1 回答 1

2

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

我能想到的一种可能的解决方案是我为此创建一个跑步者并在那里检查该条件。类似于:

是的,这是处理此问题的一种方式,但是 IMO 使用时的最佳行为是创建一个检查条件然后执行您的代码或执行您的工作的 rake 任务

就像是:

耙任务

namespace :user do
  desc "description"
  task check_for_new: :environment do
    if User.any_new_user? 
      # code
    end
  end
end 

在你的schedule.rb文件中

every 1.day, :at => '6:00 am' do
  rake "user:check_for_new"
end
于 2017-09-07T06:30:53.437 回答