Ruby on rails 可安装引擎-未初始化的常量客户(名称错误)

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中创建了一个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 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应用程序不同)有关。