Roadie + Devise,无法设置 Devise 电子邮件的样式

Roadie + Devise, can't style Devise emails

Rails 4.1.9,Ruby 2.2,Roadie 3.0.3,roadie-rails 1.0.4,设计 3.4.1,SASS

我有一个共享布局,用于设计邮件程序和非设计邮件程序。对于非设计邮件程序,我明确设置了 roadie gem。例如:

class ReportMailer < ActionMailer::Base
  include Roadie::Rails::Automatic

  def send_report_email
    ...
    mail(to: @user.email, subject: subject) do |format|
      format.html { render layout: 'emails' }
    end
  end

  ...

  private
  def roadie_options
    super unless Rails.env.test?
  end
end

这是布局的头部:

<head>
  <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
  <meta name="viewport" content="width=device-width, initial scale=1.0">
  <%= stylesheet_link_tag('mailers/shared') %>
  <%= stylesheet_link_tag(yield :stylesheet_path) %>
</head>

对于我的自定义邮件程序,我提供了 stylesheet_path,但在我的设计视图中没有。但是,即使 mailers/shared css 文件被应用于自定义邮件程序,它也不适用于设计邮件程序。

在我的 application.rb:

config.to_prepare do
  Devise::Mailer.layout 'emails'
end

我还设置了 mailer_previews,虽然样式应用于 custom_mailer 的两个样式表,但没有样式应用于我的设计邮件程序视图。

我确实重启了我的服务器。我尝试按照说明 here 进行操作。但我想我在某处遗漏了一些东西。是否有一些额外的选项我需要添加到设计控制器或做一些猴子修补才能让它工作?有什么想法吗?

P.S。我想用 roadie 标记它,但我没有足够的声誉。随意添加它。谢谢!

我最终写了一个初始化器来给 Devise 打补丁。您可以使用以下代码将 devise_mailer_overrides.rb 添加到 config/initializers 中,它似乎可以工作:

Devise::Mailer.class_eval do
  self.asset_host = nil
  include Roadie::Rails::Automatic

  private

  def roadie_options
    super unless Rails.env.test?
  end
end

当不需要 roadie_options 时,可能是这种情况:

config.to_prepare do
  Devise::Mailer.layout 'mailer'
  Devise::Mailer.send(:include, Roadie::Rails::Automatic)
end