ruby-on-rails - rails 每当 gem ,只有在特定条件通过时才运行命令。

标签 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

我们如何通过when 和rails 实现这一点?
我能想到的一个可能的解决方案是,我为此创建一个运行者并检查那里的条件。类似:
every 1.day, :at => '6:00 am' do
  runner "User.say_conditional_hello"
end

在我的用户模型中:
def self.say_conditional_hello
    `echo "Hello"`
end  

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

提前致谢!。

最佳答案

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

One possible solution i can think of is that i create a runner for this and check that condition there.Something like:



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

就像是:

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

关于ruby-on-rails - rails 每当 gem ,只有在特定条件通过时才运行命令。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331332/

相关文章:

ruby-on-rails - 如何修复 rails 中的错误

ruby-on-rails - Rails Active Model Serializer 包含在 Controller 中不注入(inject)在包含的参数中有很多关系

python - Selenium 脚本在控制台工作,在 CRON 中不工作 - Geckodriver 错误

kubernetes - 如何自动删除 CronJob 创建的已完成的 Kubernetes 作业?

ruby-on-rails - 如何使用 Paperclip 为我的附件指定文件名?

ruby-on-rails - 如何在rails3 select中渲染图片

PHP curl 获取 header 不适用于超过 300 个条目的 cron 作业

ruby-on-rails - 'NoMethodError : undefined method' in Ruby on Rails Model

ruby-on-rails - ruby on Rails 中的 Cronjob

ruby - 使用 Whenver 和 Rake 配置 Dockerfile 以运行 Cron 任务