gem时的rails,仅在某些条件通过时运行命令。

时间:2013-08-20 09:17:15

标签: ruby-on-rails cron whenever

我们正在使用我们项目中带有rails的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

我们如何通过随时随地实现这一目标? 我能想到的一个可能的解决方案是,我为此创建了一个跑步者并检查那里的情况。如:

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

并在我的用户模型中:

def self.say_conditional_hello
    `echo "Hello"`
end  

对这种方法或任何新方法的任何建议都会非常有用。

提前致谢!

1 个答案:

答案 0 :(得分: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