ruby-on-rails - 尝试在 Rails 中使用自定义 DeliveryMethod 时出现无效的传递方法错误

标签 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

当我尝试在应用程序中发送邮件时,出现错误:

Invalid delivery method :custom_deliverer

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

config.action_mailer.delivery_method = CustomDeliverer::DeliveryMethod

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

CustomDeliverer::DeliveryMethod has been removed from the module tree but is still active!

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

最佳答案

弄清楚了:

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

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

关于ruby-on-rails - 尝试在 Rails 中使用自定义 DeliveryMethod 时出现无效的传递方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141274/

相关文章:

javascript - Rails - 事件的隐藏选项

ruby-on-rails - 在Rails迁移中创建索引时如何限制字段长度?

ruby-on-rails - 将 Rails form_for 路由到自定义 Controller 的语法

ruby - 为什么我会看到这两个几乎相同的 Ruby 正则表达式模式的不同结果,为什么一个匹配我认为不应该匹配的内容?

ruby-on-rails - 重用 minitest 集成测试

ruby-on-rails - 使用嵌套表单和 Rails 4 时如何防止创建空白?

ruby-on-rails - bson Gem 构建 native 扩展失败

ruby-on-rails - rails 中的嵌套表单 - 在 has_many 关系中访问属性

ruby-on-rails - Controller Rails 中未初始化的常量

ruby-on-rails - rails : Creating models from existing tables?