ruby-on-railsrake-taskrufus-scheduler

Loading Rails Environment when running rake tasks using Rufus scheduler and Sidekiq


What I am trying to accomplish is to run some custom rake tasks on set intervals using rufus-scheduler.

Here is my task_scheduler.rb

require 'rufus-scheduler'
require 'rake'

load File.join(Rails.root, 'lib', 'tasks', 'worker_runner.rake')
s = Rufus::Scheduler.new

s.every '1m' do 
    Rake::Task['auto_visit'].reenable
    Rake::Task['auto_visit'].invoke
end 

s.every '5m' do
    Rake::Task['room_master'].reenable
    Rake::Task['room_master'].invoke 

    Rake::Task['room_key'].reenable
    Rake::Task['room_key'].invoke 
end

s.every '15m' do
    Rake::Task['deadmans_snitch'].reenable
    Rake::Task['deadmans_snitch'].invoke 
end

s.every '1h' do
    Rake::Task['bitly_data'].reenable
    Rake::Task['bitly_data'].invoke 
end

Here is my worker_runner.rake

task :auto_visit => :environment do 
    puts 'Running auto visit worker'
    AutoVisitWorker.new.perform
end

task :bitly_data => :environment do
    puts 'Running bitly data worker'
    BitlyDataWorker.new.perform
end

task :deadmans_snitch => :environment do
    puts 'Running Deadmans Snitch worker'
    DeadmansSnitchWorker.new.perform
end

task :room_master => :environment do
    puts 'Running Room Master worker'
    RoomMasterApiWorker.new.perform
end

task :room_key => :environment do
    puts 'Running Room Key worker'
    RoomkeyApiWorker.new.perform
end

The intervals are triggering correctly but I keep getting the following error:

rufus-scheduler intercepted an error:

  2218687480   job:

  2218687480     Rufus::Scheduler::EveryJob "1m" {}

  2218687480   error:

  2218687480     2218687480

  2218687480     RuntimeError

  2218687480     Don't know how to build task 'environment'

  2218687480       /Users/NamNguyen/.rvm/gems/ruby-2.1.1/gems/rake-10.4.2/lib/rake/task_manager.rb:62:in `[]'

I was researching this and it seems like maybe I'm not loading the environment in the 'task_scheduler.rb' correctly.

I tried loading 'RAILS_ENV=development' before 'Rake::Task' getting the same error. I also tried loading it after (which I know doesn't make any sense) with no luck. I also tried to 'require './config/boot'' and 'require './config/environment'' at the top with no luck.

I've also tried system 'rake worker_runner:auto_visit RAILS_ENV=development' which ended up running each task twice.

Any help will be greatly appreciated :)

PS. I'm newbie, so sorry, if that was dumb question


Solution

  • Could the answer at Testing Rake task with Rspec with Rails environment help?

    require 'rufus-scheduler'
    require 'rake'
    MyRailsApp::Application.load_tasks
    
    # ...
    

    Found via https://www.google.com/search?q=don%27t+know+how+to+build+task+%27environment%27