如何在 ruby 应用程序中自定义 cron 作业?
How to customize cron job in ruby application?
我一直在用 padrino ruby 框架开发后端,我想构建一个 cron 作业。
这就是我所做的。
gem 'whenever', :require => false
wheneverize .
里面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:in
block 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)
我一直在用 padrino ruby 框架开发后端,我想构建一个 cron 作业。
这就是我所做的。
gem 'whenever', :require => false
wheneverize .
里面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:inwhere' /Volumes/Data/Work/RBP/GAB/tasks/cronjob.rake:12:in
block in ' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:250:inblock 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:inexecute' /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:inmon_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)