2

我为我的 Rails 4 应用程序构建了一个自定义电子邮件传递方法:

module CustomDeliverer
  class DeliveryMethod

    def initialize(options = {})
    end

    def deliver!(mail)
      # method body hidden/not relevant for this question
    end
  end
end

我还按照开信刀 gem 中的示例注册了自定义交付方式:

module CustomDeliverer
  class Railtie < Rails::Railtie
    initializer "custom_deliverer.add_delivery_method" do
      ActiveSupport.on_load :action_mailer do
        ActionMailer::Base.add_delivery_method :custom_deliverer, CustomDeliverer::DeliveryMethod
      end
    end
  end
end

我已将我的配置文件设置为使用此交付器:

config.action_mailer.delivery_method = :custom_deliverer

当我尝试在我的应用程序中发送邮件时,我收到错误消息:

交付方式无效:custom_deliverer

但是,当我将配置文件设置为直接使用交付者时:

config.action_mailer.delivery_method = CustomDeliverer::DeliveryMethod

它可以正常工作,但是只要应用程序中的代码发生更改(在本地开发时),我就会收到错误消息:

CustomDeliverer::DeliveryMethod 已从模块树中移除,但仍处于活动状态!

我应该在哪里注册或要求在我的 rails 应用程序中注册 CustomDeliverer::Railtie 以便我可以通过符号设置交付方式?

4

1 回答 1

2

弄清楚了:

添加了一个初始化程序 config/initializers/add_custom_delivery_method.rb,而不是使用仅用于 gems 的 Railtie:

ActiveSupport.on_load :action_mailer do
  ActionMailer::Base.add_delivery_method :custom_deliverer, CustomDeliverer::DeliveryMethod
end
于 2014-04-17T19:12:25.213 回答