Mellon
Mellon

Reputation: 38832

uninitialized constant error when run my rake task, why?

I have a class which is NOT an ActiveRecord. the class is located under lib/room/

lib/room/car_painter.rb

class ROOM::CarPainter

  def paint_car
    ...
  end

end

Then, I have a rake task: under /lib/tasks/

/lib/tasks/new_car_painting.rake

namespace :new_car do

  desc "Paint new cars"
  task :paint => :environment do
    painter = ROOM::CarPainter.new #ERROR HERE- uninitialized constant
    painter.paint_car
  end

end

When I run rake new_car:paint, I got the error message "uninitialized constant ROOM::CarPainter", Why??

--EDIT---

I also tried to use class function instead of instance function, like following:

class ROOM::CarPainter

   def self.paint_car
        ...
   end

end

and

namespace :new_car do

  desc "Paint new cars"
  task :paint => :environment do
    ROOM::CarPainter.paint_car #ERROR HERE- uninitialized constant
  end

end

But I get the same error message...why again

Upvotes: 1

Views: 3273

Answers (2)

Ashish
Ashish

Reputation: 5791

This is rake file.

desc 'This is just a testing rake task'
  task :update_ts => :environment do |t,args|
  puts 'ashish is great'
  include TestLib
  print_sm
end

This is lib/test_lib.rb file.

module TestLib
 def print_sm
  puts "Hello World in Lib Directory"
 end
end

You just need to include that module.

Edited:

I guess problem is your lib/* folder loading. Try with this in your application.rb file:

 config.autoload_paths += Dir["#{config.root}/lib/**/"]

Upvotes: 3

tommasop
tommasop

Reputation: 18765

In rails you need to require from the root and rails 3 practice is the following

require Rails.root.join('path')

Upvotes: 0

Related Questions