我试图为电子邮件通知和刮板创建后台作业。 我使用resque-scheduler(4.0.0),resque(1.25.2)和rails 4.2.1。如何设置active_job和救援调度程序?
我config.ru文件:
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
run Rails.application
require 'resque/server'
run Rack::URLMap.new "/" => AppName::Application, "/resque" => Resque::Server.new
我/lib/tasks/resque.rake:
require 'resque/tasks'
require 'resque/scheduler/tasks'
namespace :resque do
task :setup do
require 'resque'
require 'resque-scheduler'
Resque.schedule = YAML.load_file("#{Rails.root}/config/resque_schedule.yml")
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }
end
end
我/config/resque_scheduler.yml:
CheckFsUpdatesJob:
queue: fs_updates
every:
- '1h'
- :first_in: '10s'
class: CheckFsUpdatesJob
args:
description: scrape page
我/config/initializer/active_job.rb
ActiveJob::Base.queue_adapter = :resque
我/config/initializer/resque.rb:
#config/initializers/resque.rb
require 'resque-scheduler'
require 'resque/scheduler/server'
uri = URI.parse("redis://localhost:6379/")
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }
Resque.schedule = YAML.load_file(Rails.root.join('config', 'resque_schedule.yml'))
Resque::Server.use(Rack::Auth::Basic) do |user, password|
user = 'admin'
password = 'admin'
end
我的电子邮件通知的第一份工作:
class EmailNotificationJob < ActiveJob::Base
queue_as :email_notifications
def perform(episode_id, email)
NotificationMailer.new_record_appears(record_id, email).deliver_now
end
end
我的计划运行的第二职业:
class CheckFsUpdatesJob < ActiveJob::Base
queue_as :fs_updates
def perform()
FsStrategy.new.check_for_updates
end
end
所以我必须工作: 1.电子邮件通知 - 当DB中出现新记录时应发送电子邮件 2.刮页面 - 应该每小时一班
我如何运行它:
redis-server
rake environment resque:work QUEUE=fs_updates
rake environment resque:work QUEUE=email_notifications
rake environment resque:scheduler
rails s
在Resque仪表板运行这些命令我看到两个工人,两个队列之后,它的预期。
但是!
在resque Schedule选项卡上单击'立即排队'按钮后,我看到该任务已创建并且被写入“fs_updates”队列。但它没有运行,并在几秒钟内消失。
当我为从rails控制台发送的邮件运行作业时,它根本不起作用。
请帮我解决我的配置问题。 非常感谢!