只是从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
。
任何想法我在做什么错-看起来确实很古怪,但我看不到什么。
答案 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,以了解require
和autoload
之间的区别。更重要的是,autoload
由于其延迟加载的陷阱而正在被弃用。