如何在 ruby 应用程序中自定义 cron 作业?

How to customize cron job in ruby application?

我一直在用 padrino ruby 框架开发后端,我想构建一个 cron 作业。

这就是我所做的。

里面schedule.rb

 every 1.minute do
    rake "cronjob"
 end

/tasks/cronjob.rake

这里我添加了我的自定义任务。在这里添加会很长。

所以我只写了错误发生的部分

performances = Performance.left_join(:slots, id: :slot_id).where(Sequel.~(status: ModelA::Api.settings.pending),Sequel[:slots][:from]>oneweekbefore,Sequel[:slots][:to]<onemonthafter+1.day)
....

begin
  data = {}
  data[:from] = "** <postmaster@**.mailgun.org>"
  data[:to] = email
  data[:subject] = subject
  data[:html] = render 'mails/sendemailbasedontime',:locals => { :data => localdata }
  RestClient.post GigabitArtist::Api.settings.mailgun_domain, data
    rescue => exception
      puts exception.inspect
    end
end

我遇到了这些错误:

SEQUEL DEPRECATION WARNING: Passing multiple arguments as filter arguments when not using a conditions specifier ([#:!=, @args=>[:status, "pending"]>, #:>, @args=>[#"slots", @column=>:from>, Sat, 02 Dec 2017]>, #:<, @args=>[#"slots", @column=>:to>, Wed, 10 Jan 2018]>]) is deprecated and will be removed in Sequel 5. Pass the arguments to separate filter methods or use Sequel.& to combine them. /Users/whitesnow/.rvm/gems/ruby-2.4.1/gems/sequel-4.46.0/lib/sequel/dataset/query.rb:1296:in filter_expr' /Users/whitesnow/.rvm/gems/ruby-2.4.1/gems/sequel-4.46.0/lib/sequel/dataset/query.rb:1249:in add_filter' /Users/whitesnow/.rvm/gems/ruby-2.4.1/gems/sequel-4.46.0/lib/sequel/dataset/query.rb:1034:in where' /Volumes/Data/Work/RBP/GAB/tasks/cronjob.rake:12:inblock in ' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:250:in block in execute' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:250:in each' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:250:in execute' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:194:in block in invoke_with_call_chain' /Users/whitesnow/.rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/monitor.rb:214:in mon_synchronize' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:187:in invoke_with_call_chain'

我认为错误来自 sequel querying

data[:html] = render 'mails/sendemailbasedontime',:locals => { :data => localdata }

当然,此查询已在其他 .rb 文件中进行了测试,我使用原始 sql 进行了测试。例如,我在 test.rb 控制器的 get 请求处理程序中测试了这个任务。而且效果很好 我想知道我是否可以在任务中使用渲染功能。 我整天都在寻找这个问题,但没有成功。 任何建议都会对我有很大帮助。 非常感谢。

如弃用警告所述,您正在将多个参数传递给过滤器方法。最简单的修复方法是为每个参数单独调用一个过滤器方法:

performances = Performance.
  left_join(:slots, id: :slot_id).
  exclude(status: ModelA::Api.settings.pending).
  where(Sequel[:slots][:from]>oneweekbefore).
  where(Sequel[:slots][:to]<onemonthafter+1.day)