我想使用delayed_job在经过一段特定时间后向用户发送通知。我正在ubuntu上运行rails 4.0.13版。
我在这里按照README:https://github.com/collectiveidea/delayed_job
添加了以下宝石:
gem 'daemons'
gem 'delayed_job_active_record'
创建表delayed_job:
rails generate delayed_job:active_record
rake db:migrate
生成delayed_job:
rails generate delayed_job
这在bin目录中创建了delayed_job.rb而不是脚本目录。我想这是因为我正在使用ruby Rails 4.0.13(来自README:Rails 4:用bin / delayed_job替换script / delayed_job)。
我的delayed_job.rb的内容:
#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require 'delayed/command'
Delayed::Command.new(ARGV).daemonize
RAILS_ENV=development bin/delayed_job start
RAILS_ENV=development bin/delayed_job stop
应该在特定时间运行的方法:
def send_notification
print "==========SEND_NOTIFICATION============="
#Some code to send notification to user
end
handle_asynchronously :send_notification, :run_at => Proc.new { 1.minute.from_now }
这会在db表延迟作业中创建一个条目,并在run_at列中显示正确的时间。但是这项工作从未执行过。尝试列保持为0并且终端中不打印任何内容。
rake jobs:work确实执行了该作业并将其从db中删除。