2

I'm trying to user rake and rufus, both of which I am new to. I want to have Rufus call my rake task but I am getting the following error. Don't know how to build task 'inbox:process_inbox'

lib/tasks/inbox_tasks.rb

namespace :inbox do
  task :process_inbox do
    logger = Logger.new(Rails.root.to_s + "/log/scheduler.log")
    logger.info "Rufus Here!"
  end
end

rufus_scheduler.rb

require 'rufus-scheduler'
require 'rake'

scheduler = Rufus::Scheduler.new

scheduler.every '10s', :first_at => Time.now + 3 do
  Rake::Task["inbox:process_inbox"]
end
Antarr Byrd
  • 24,863
  • 33
  • 100
  • 188

2 Answers2

2

Could this one help?

How to build task 'db:populate' (renaming inbox_tasks.rb to inbox_tasks.rake)

(did a simple https://www.google.com/?#q=rails+don%27t+know+how+to+build+task ...)

Community
  • 1
  • 1
jmettraux
  • 3,511
  • 3
  • 31
  • 30
2

As @jmettraux (the creator of rufus-scheduler!) has already answered, the problem is that the rake task is defined in a .rb file instead of .rake file.

Adding some more details to help in the future.

While creating a new rake task, you could get the rails generator to automatically create the file with appropriate structure.

Example: Running

> rails g task inbox process_inbox
create  lib/tasks/inbox.rake

will create a file named lib/tasks/inbox.rake with content:

namespace :inbox do
 desc "TODO"
 task process_inbox: :environment do
 end 

end

Having a DESC in the task definition is important; that allows for verifying that the rake task is defined and available, by running either rake -T inbox or rake -T | grep inbox

> rake -T inbox
rake inbox:process_inbox  # TODO
Prakash Murthy
  • 12,923
  • 3
  • 46
  • 74