尝试在rails中使用自定义DeliveryMethod时,传递方法错误无效

时间:2014-04-17 18:57:33

标签: ruby-on-rails ruby ruby-on-rails-4 mail-gem

我已为我的Rails 4应用构建了自定义电子邮件投放方式:

module CustomDeliverer
  class DeliveryMethod

    def initialize(options = {})
    end

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

我也跟着the example in the letter opener 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,以便我可以通过符号设置交付方式?

1 个答案:

答案 0 :(得分:2)

想出来:

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

ActiveSupport.on_load :action_mailer do
  ActionMailer::Base.add_delivery_method :custom_deliverer, CustomDeliverer::DeliveryMethod
end