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

时间:2017-12-08 20:31:06

标签: ruby cron padrino

我一直在开发一个带有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警告:将多个参数作为过滤器传递   不使用条件说明符时的参数   ([#:!=,@ args =&gt; [:状态,   &#34;待定&#34;]&gt;,#:&gt;,   @ ARGS =&GT; [#&#34;槽&#34 ;,   @ column =&gt;:from&gt;,Sat,2017年12月2日]&gt;,#:&lt;,@ args =&gt; [#&#34; slots&#34;,   @ column =&gt;:to&gt;,Wed,2018 Jan 201]&gt;])已被弃用,将被删除   在续集5.将参数传递给单独的过滤方法或使用   。续集和放大器;结合它们。       /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&#39;       /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阻止&#39;       /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 各&#39;       /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:250:in   {* 1}}阻止invoke_with_call_chain&#39;       /Users/whitesnow/.rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/monitor.rb:214:in   execute' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:194:in invoke_with_call_chain&#39;

我认为错误来自mon_synchronize' /Users/whitesnow/.rvm/gems/ruby-2.4.1@global/gems/rake-12.0.0/lib/rake/task.rb:187:in

sequel querying

当然,这个查询在其他.rb文件中测试过,我用raw sql测试过。例如,我在test.rb控制器的get request hander里面测试了这个任务。它确实运作良好 我想知道我是否可以在任务中使用渲染功能。 我整天搜索这个问题没有成功。 任何建议对我都有很大的帮助。 非常感谢你。

1 个答案:

答案 0 :(得分:1)

正如弃用警告所述,您将多个参数传递给过滤器方法。最简单的解决方法是为每个参数分别调用filter方法:

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)