【问题标题】:How do I specify a stylesheet for my HTML email with Premailer-Rails gem?如何使用 Premailer-Rails gem 为我的 HTML 电子邮件指定样式表?
【发布时间】:2016-12-23 23:27:44
【问题描述】:

我有一个样式表,我想在我的 HTML 电子邮件的路径中使用: app/vendor/assets/stylesheets/inspinia/email_templates/email-styles.css

我正在使用Premailer-Rails gem 来设置我的电子邮件样式。

在我的mailer.html.erb 布局中,我有以下内容:

<%= stylesheet_link_tag "inspinia/email_templates/email-styles.css", media: 'all' %>

但是,在我的 Heroku 日志中,我收到以下消息:

app[web.1]: [923202d9-b3f1-4b9a-9f42-7b70dcc01d92] Started GET "/stylesheets/inspinia/email_templates/email-styles.css" for 54.167.56.21 at 2016-12-23 23:25:08 +0000
app[web.1]: [923202d9-b3f1-4b9a-9f42-7b70dcc01d92]   
2016-12-23T23:25:08.286725+00:00 app[web.1]: [923202d9-b3f1-4b9a-9f42-7b70dcc01d92] ActionController::RoutingError (No route matches [GET] "/stylesheets/inspinia/email_templates/email-styles.css"):

那么我如何在生产中找出/指定此样式表的正确路径?

【问题讨论】:

  • 尝试将您的电子邮件样式设置为vendor/assets/...,而不是app/vendor/assets/..

标签: ruby-on-rails asset-pipeline ruby-on-rails-5 premailer


【解决方案1】:

尝试将email-styles.css 移动到/public/assets/ 文件夹,或将其添加到资产管道。 Premailer-rails wiki:

  1. 文件系统:如果 public/ 中存在与 URL 相同路径的文件,则从磁盘读取。例如。如果 URL 是 http://cdn.example.com/assets/email.css,则返回位于 public/assets/email.css 的文件的内容(如果存在)。

  2. 资产管道:如果 Rails 可用且资产管道已启用,则通过资产管道检索文件。例如。如果 URL 是 http://cdn.example.com/assets/email-fingerprint123.css,则从资产管道请求文件 email.css。也就是说,指纹和前缀(在这种情况下资产是前缀)在从资产管道请求之前被剥离。

【讨论】:

    【解决方案2】:

    将以下内容添加到config/initializers/assets.rb

    Rails.application.config.assets.precompile << 'email-styles.css'
    Rails.application.config.assets.paths << Rails.root.join('app/vendor/assets/stylesheets/inspinia/email_templates')
    

    然后在模板中使用&lt;%= stylesheet_link_tag 'email-styles.css', media: 'all' %&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 2012-02-21
      • 2021-11-17
      相关资源
      最近更新 更多