2

我试图为电子邮件通知和刮板创建后台作业。 我使用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控制台发送的邮件运行作业时,它根本不起作用。

请帮我解决我的配置问题。 非常感谢!

回答

0

据我所知:rails和active_job开发人员不对resque插件负责。也许这个问题将在新的宝石版本中得到解决,但现在它不起作用(active_job在resque-scheduler中无法正常工作)。

目前我使用gem 'active_scheduler'来解决当前的问题。

0

我曾尝试在rails上配置Sucker Punch 4.2.1最后,我将自定义的初始化逻辑移至application.rb中,但效果并不好,但它启动并运行了。

不确定在此版本中是否存在初始问题。尝试将您的代码从active_job.rb和resque.rb移动到application.rb或相应的环境文件中。显然,这不是一个长期的解决方案,但它至少可以帮助您识别它是一个初始化问题还是Resque配置问题。