我为我的 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/