【问题标题】:Rails engine doesn't load mailerRails 引擎不加载邮件程序
【发布时间】:2015-04-22 16:57:58
【问题描述】:

我正在我的应用程序中开发一个引擎,并在engines/MY_ENGINE/app/mailers 中为这个引擎创建一个邮件程序,但我收到了uninitialized constant MY_ENGINE::TicketMailer

通过执行puts $: 检查加载的路径我看到rails 在app 文件夹中加载资产、控制器、模型和帮助程序,而不是邮件。

有没有办法解决这个问题并添加要加载的路径?

【问题讨论】:

  • 你确定你的邮件是这样命名的吗?
  • 是的。它位于模块 MY_ENGINE 中,称为 TicketMailer。我打印了加载的路径,但邮件文件夹不存在。即使我拼错了类的名称,也应该加载文件夹。
  • 如果你的模块名称是 literally MY_ENGINE 你会遇到问题。 Rails 自动加载器会将其扩展为 m_y_en_g_i_n_e 之类的东西,这根本不是您想要的。在自动加载系统中example_name 变为ExampleName。最好使用MyEngine 之类的名称和my_engine 的路径以保持一致。
  • @tadman 感谢您的关注,但这不是命名问题,我的引擎不是这样命名的,您可以在下面的答案中看到我是如何解决问题的。

标签: ruby-on-rails ruby ruby-on-rails-4 rails-engines


【解决方案1】:

我找到了解决这个问题的方法。显然 mailers 文件夹不会自动加载,但您可以手动将文件夹添加到加载路径,在您的 engine.rb 中添加一行这样的行:

paths['app/mailers'] << 'MY_ENGINE/app/mailers'

像这样:

module MY_ENGINE
  class Engine < ::Rails::Engine
    isolate_namespace MY_ENGINE
    paths['app/mailers'] << 'MY_ENGINE/app/mailers'
  end
end

这解决了问题。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多