无法在轨道上的可安装引擎中加载模型

Posted

技术标签:

【中文标题】无法在轨道上的可安装引擎中加载模型【英文标题】:cannot load models within mountable engine on rails 【发布时间】:2013-08-13 09:33:47 【问题描述】:

我有一个使用 mongo db 的 rails 项目,并且我编写了一个名为“report_service”的可挂载引擎。

我在 main rails 项目中这样使用它:

gem 'report_service', :git => 'git@xx.com:report_service.git', :branch => :master, :require => false

我不想在 Rails 项目初始化时加载这个 gem,所以我添加了 :require => false 选项。

但是在我的 Rails 控制台中,在我执行 require 'report_service' 之后,我在这个 gem 中找不到模型。

[1] pry(main)> ReportService
=> ReportService
[2] pry(main)> ReportService::Engine
NameError: uninitialized constant ReportService::Engine
from (pry):2:in `<main>'
[3] pry(main)> require 'report_service'
=> true
[4] pry(main)> ReportService::Engine
=> ReportService::Engine
[5] pry(main)> ReportService::RsExam
NameError: uninitialized constant ReportService::RsExam
from (pry):5:in `<main>'

这是我的 report_service gem 目录和代码:

report_service/lib/report_service.rb

require "active_record/railtie"
require "report_service/engine"
module ReportService
end

report_service/lib/report_service/engine.rb

module ReportService
  class Engine < ::Rails::Engine
   isolate_namespace ReportService
  end
end

report_service/app/models/report_service/rs_exam.rb

module ReportService
  class RsExam < ActiveRecord::Base
  end
end

【问题讨论】:

您是否尝试过在初始化时加载您的 gem?然后尝试? 去掉':required => false'也没关系,但这不是我想要的 【参考方案1】:

放弃该更新。只需将require "report_service/rs_exam" 添加到您的report_service.rb

require "active_record/railtie"
require "report_service/engine"
require "report_service/rs_exam"
module ReportService
end

我的理由是,正在发生的事情是您加载了模型report_service/rs_exam,这就是为什么您会收到未初始化的常量错误的原因。因为查看控制台输出。

加载 gem 工作正常。

require 'report_service'
=> true

ReportService::Engine 加载正常。

[4] pry(main)> ReportService::Engine
=> ReportService::Engine

但是当你尝试加载 rs_exam 时

[5] pry(main)> ReportService::RsExam
NameError: uninitialized constant ReportService::RsExam
from (pry):5:in `<main>'

您收到未初始化的常量错误,因为它不是必需的。试试看,让我知道你的进展情况

【讨论】:

class Engine &lt; ::Rails::Engine 是由rails plugin new blorgh --mountable 默认生成的,当我删除Rails::Engine 之前的分号时,它会得到同样的错误,这不是问题,因为在require 'report_service' 之后,我可以加载ReportService::Engine,问题是我无法在引擎中加载模型,就像这个错误[5] pry(main)&gt; ReportService::RsExam NameError: uninitialized constant ReportService::RsExam 您是否正确安装了它,它是否已插入您的路线? 如果我使用gem 'report_service', :git =&gt; 'git@xx.com:report_service.git', :branch =&gt; :master,一切正常,但我添加了 ':required => false' 选项,因为我不想在 rails 项目初始化时加载这个 gem @RichieMin 你正在做的另一件事是:require =&gt; false。我希望你知道这是做什么的。您在 gemfile 中所说的是您将该 gem 注册为依赖项没有它是必需的。据我了解,如果我是正确的,您这样做的原因是因为您只想注册它而不是加载它。所以无论如何在你的生产模式下你都需要它。再次添加我建议的 require 行。 @RichieMin 如果这个答案对你的问号有帮助,那就完成

以上是关于无法在轨道上的可安装引擎中加载模型的主要内容,如果未能解决你的问题,请参考以下文章

无法在 TensorFlow 2 中加载模型权重

无法在仅 TensorFlow CPU 版本中加载模型

无法在 Autodesk Forge Viewer 中加载 SVF2 模型

如何在轨道上的ruby中引用控制器中的另一个类?

编程语言“在轨道上”意味着啥?

无法在 tensorflow 官方 resnet 模型中加载用于 eval 的图像