【问题标题】:uninitialized constant error when run my rake task, why?运行我的 rake 任务时出现未初始化的常量错误,为什么?
【发布时间】:2011-03-15 08:31:05
【问题描述】:

我有一个不是 ActiveRecord 的课程。 该类位于 lib/room/ 下

lib/room/car_painter.rb

class ROOM::CarPainter

  def paint_car
    ...
  end

end

然后,我有一个 rake 任务: 在 /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

当我运行 rake new_car:paint 时,我收到错误消息“uninitialized constant ROOM::CarPainter”,为什么??

--编辑---

我也尝试使用类函数而不是实例函数,如下所示:

class ROOM::CarPainter

   def self.paint_car
        ...
   end

end

命名空间:new_car 做

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

end

但是我得到了同样的错误信息……为什么又是这样

【问题讨论】:

  • 需要lib/room/car_painter
  • 不,它包含“未定义的局部变量或方法 `lib' for main:Object”
  • 包括该模块,如答案帖子中所示

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

这是 rake 文件。

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

这是 lib/test_lib.rb 文件。

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

你只需要包含那个模块。

已编辑:

我猜问题是你的 lib/* 文件夹加载。 在你的 application.rb 文件中试试这个:

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

【讨论】:

  • 你好,我的风格和你一模一样,但还是弹出同样的错误信息...:(
  • 是的..在Rails 3中,lib文件夹默认不在自动加载路径中..你需要在environment.rb文件中添加它..在Rails 2中它默认是自动加载的。
【解决方案2】:

在rails中你需要从根开始,rails 3的做法如下

require Rails.root.join('path')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2015-02-10
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多