Ruby NameError:未初始化的常量

时间:2018-08-22 04:09:41

标签: ruby

只是从Ruby开始-已经停滞了:)

我有一个像这样的模块:

module Simple
  Env = AppEnv::Environment.new { |env, src|
    env.test = src.test
  }

  class Application < Rails::Application
    config.autoload_paths += [
      "#{config.root}/app/lib/"
    ]
  end

end

然后在/ app / lib文件夹中创建一个名为simplex.rb的类

class Simplex

    def initialize(some)
        puts(some)
    end

end

最后是一个类似的耙任务:

task(:simple => 'simple:default')

namespace(:simple) {

  desc('Run simple, first task')
  task(:default => :load) do
    Simplex.new('okok')
  end
}

但是我仍然收到错误消息:NameError: uninitialized constant Simplex

我本以为autoload_paths将允许找到Simplex

任何想法我在做什么错-看起来确实很古怪,但我看不到什么。

1 个答案:

答案 0 :(得分:2)

在Rake文件的顶部,尝试添加require "#{Rails.root}/lib/simplex"以引入您的Simplex类。 Autoload的工作方式如下:

mylibrary.rb

puts "I was loaded!"

class MyLibrary
end

IRB

irb(main):001:0> require 'mylibrary'
I was loaded!
=> true

irb(main):001:0> autoload :MyLibrary, 'mylibrary'
=> nil
irb(main):002:0> MyLibrary.new
I was loaded!
=> #<MyLibrary:0x0b1jef>

我强烈建议阅读this article,以了解requireautoload之间的区别。更重要的是,autoload由于其延迟加载的陷阱而正在被弃用。