2

我正在使用发条宝石发送每日电子邮件。我在 lib 文件夹中创建了 clock.rb 文件。

  #clock.rb
  require 'rubygems'
  require 'clockwork'
  include Clockwork

  every(1.day, 'reminders.send', :at => '09:30'){
   @leave_details = LeaveDetail.all(:conditions => {:status => [LeaveDetail::STATUS_PENDING, LeaveDetail::STATUS_PENDING_MNGT]})
   @leave_details.each do |ld|
   UserMailer.leave_reminder_email(ld).deliver
 end
}  

我创建了一个 Procfile:-

web:    bundle exec thin start -d
clock:  bundle exec clockwork lib/clock.rb

当我命令

foreman start

它显示错误:-

17:20:51 web.1   | started with pid 21144
17:20:51 clock.1 | started with pid 21146
17:20:52 clock.1 | I, [2012-12-06T17:20:52.558231 #21150]  INFO -- : Starting clock for 1 events: [ reminder.deliver ]
17:20:52 clock.1 | I, [2012-12-06T17:20:52.558324 #21150]  INFO -- : Triggering 'reminder.deliver'
17:20:52 clock.1 | E, [2012-12-06T17:20:52.558399 #21150] ERROR -- : uninitialized constant LeaveDetail (NameError)
17:20:52 clock.1 | /home/akhileshwar/Desktop/14-11-2012/RoR/P10HR/lib/clock.rb:8:in `block in <top (required)>'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:93:in `call'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:93:in `run'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:172:in `block in tick'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:170:in `each'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:170:in `tick'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:156:in `block in run'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:155:in `loop'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/lib/clockwork.rb:155:in `run'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/gems/clockwork-0.4.1/bin/clockwork:19:in `<top (required)>'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/bin/clockwork:23:in `load'
17:20:52 clock.1 | /home/akhileshwar/.rvm/gems/ruby-1.9.3-p194@rails326/bin/clockwork:23:in `<main>'
17:20:52 web.1   | >> Deleting stale PID file tmp/pids/thin.pid
17:20:52 web.1   | exited with code 0
17:20:52 system  | sending SIGTERM to all processes
SIGTERM received
17:20:52 clock.1 | terminated by SIGTERM

LeaveDetail 是模型内部的一个 ruby​​ 类。谁能告诉我为什么'LeaveDetail'在这里显示未初始化?谢谢

4

2 回答 2

0

您实际上并没有在发条中加载您的应用程序。Clockwork 是一个独立的 ruby​​ 进程。如果你不告诉它你的应用程序的其余部分,它不知道它的存在,所以你的错误是合乎逻辑的。这是来自sidekiq 的发条示例文档

# require boot & environment for a Rails app
require_relative "../config/boot"
require_relative "../config/environment"
于 2013-03-12T21:50:41.867 回答
0

您可以include Clockwork用作模块,添加require './config/boot' require './config/environment'

require './config/boot'
require './config/environment'
require 'clockwork'

module Clockwork
every(1.day, 'reminders.send', :at => '09:30'){
   @leave_details = LeaveDetail.all(:conditions => {:status => [LeaveDetail::STATUS_PENDING, LeaveDetail::STATUS_PENDING_MNGT]})
   @leave_details.each do |ld|
   UserMailer.leave_reminder_email(ld).deliver
 end
}
end
于 2013-04-21T06:31:49.180 回答