Ruby on rails 可安装引擎-未初始化的常量客户(名称错误)
我创建了一个可装载引擎,之后我在lib中创建了一个file类 像这样: 路径:Ruby on rails 可安装引擎-未初始化的常量客户(名称错误),ruby-on-rails,ruby,rails-engines,Ruby On Rails,Ruby,Rails Engines,我创建了一个可装载引擎,之后我在lib中创建了一个file类 像这样: 路径:/lib/dog.rb 类别: class Dog def initialize(breed, name) @breed = breed @name = name end def bark puts 'Ruff! Ruff!' end def display puts "I am of #{@breed} breed
/lib/dog.rb
类别:
class Dog
def initialize(breed, name)
@breed = breed
@name = name
end
def bark
puts 'Ruff! Ruff!'
end
def display
puts "I am of #{@breed} breed and my name is #{@name}"
end
end
我有一个初始值设定项
/config/initializers/scheduler.rb
包含以下内容:
d = Dog.new('Labrador', 'Benzy')
启动rails应用程序时,我收到以下错误:
uninitialized constant Dog (NameError)
我尝试在/config/中创建一个application.rb文件,其内容为
require'/lib/customer.rb'
或require'rails/all'
,但不起作用。您是否遵循了此处的指南
它说将您的班级包括为:
module Dog
class Engine < ::Rails::Engine
end
end
模块狗
类引擎<::Rails::引擎
结束
结束
但我不相信这只是你的情况。您需要运行几个步骤,它并不是作为一个普通的Ruby库来实现的,只是简单地包含在其中 我面临同样的问题,模块没有加载。通过在engine.rb中指定自动加载路径解决了此问题 在enginelib/engien\u name/engine.rb中
class Engine < ::Rails::Engine
config.autoload_paths += %W(#{config.root}/lib/modules)
end
类引擎<::Rails::引擎
config.autoload_路径+=%W(#{config.root}/lib/modules)
结束
我遇到了同样的问题。我发现这个答案很有帮助
基本上,您遇到的问题是由于lib没有像用于mainRails应用程序的lib那样自动加载到引擎中
从参考链接中,我找到了两种解决方案
选项1:自动加载
通过编辑引擎库中引擎的engine.rb
文件,可以启用引擎库文件夹的自动加载。请参阅(配置部分)
基本上,添加
config.autoload\u路径非常确定您需要使用EngineName::Dog.new(“拉布拉多”、“奔驰”)
不会产生相同的错误@j-dexxSounds,就像环境在初始化程序运行时还没有设置好,所以rails还没有加载到所有文件中一样。@engineersmnky我不能使用application.rb。文件没有加载对不起,我忘了这是引擎。你的问题是,你只是要求文件错误。尝试添加require'dog'
,因为lib
将被视为此的根目录。我的默认引擎.rb是:module Alarm class engine<::Rails::engine isolation\u namespace Alarm end end end
如何添加?我浏览了您链接的指南,但我认为您弄错了。您引用的代码是Rails特定的引擎.rb的一部分,而不是OP或我自己正在创建的文件。OP引用的问题与引擎内部的lib在默认情况下不是自动加载的(与MainRails应用程序不同)有关。