rails 4生产中的电子邮件预览

时间:2014-12-12 23:12:19

标签: email ruby-on-rails-4 actionmailer

我使用rails 4.1.1和ActionMailer :: Preview来预览电子邮件。在开发环境中,一切都很好。

但在生产环境中,无法访问预览路线。我将预览存储在test / mailers / previews /

是否可以将它们用于生产?

5 个答案:

答案 0 :(得分:14)

除此之外:

config.action_mailer.show_previews = true

您还需要设置

config.consider_all_requests_local = true
在您的环境中

可以访问预览路由。这也有其他含义(请参阅https://stackoverflow.com/a/373135/1599045),因此您可能不想在生产中启用此功能。但是,如果您的自定义环境不是development,那么这两者的组合应该可以解决问题。

已编辑添加:

最初的问题是针对rails 4.1.1,它没有config.action_mailer.show_previews可用。要在Rail 4.1.1中的非开发环境中运行ActionMailer预览,您需要先向config/routes.rb添加一些路由(在这种情况下,我的环境名为custom):

if Rails.env.custom?
  get '/rails/mailers'         => "rails/mailers#index"
  get '/rails/mailers/*path'   => "rails/mailers#preview"
end

然后您需要自动加载环境配置文件中所需的库(在我的情况下,config/environments/custom.rb):

config.action_mailer.preview_path ||= defined?(Rails.root) ? "#{Rails.root}/test/mailers/previews" : nil
config.autoload_paths += [config.action_mailer.preview_path]

这似乎与config.action_mailer.show_previews执行相同的任务。

与4.2一样,您仍需要根据自定义环境是在本地还是在服务器上使用来调整本地请求配置。

答案 1 :(得分:11)

要做到这一点,不要打开一个大的安全漏洞:

production.rb

BasicTest.java
BasicVer1Test.java
BasicVer2Test.java

答案 2 :(得分:3)

最好的答案是,config.action_mailer.show_previews = true可以在制作中启用预览。

我只想添加如何在自己的管理区域内呈现iframe中的预览,例如。在active admin(Rails 5.1)

而且我发现write your own email previews administration并不难,并且根本不使用rails标准预览。然后,您可以添加自己的功能,例如更改预览参数或发送按钮,以便在手机中查看此电子邮件。

答案 3 :(得分:2)

从Rails 4.2中,您可以使用production.rb(或其他自定义环境)中的标志:

config.action_mailer.show_previews = true

我在Rails 4.1中找不到类似内容。

<强>更新
例如,如果使用Rspec,则需要添加路径:

config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews"

默认路径为&#34;#{Rails.root} / test / mailers / previews&#34;。

无需触及 config.consider_all_requests_local

答案 4 :(得分:1)

这是我为 Rails 5.2 所做的:

<块引用>

production.rb

  config.action_mailer.show_previews = true
  config.action_mailer.preview_path ||= defined?(Rails.root) ? "#{Rails.root}/spec/mailers/previews" : nil

  class ::Rails::MailersController
    include ::ApplicationController::Authorization
    before_action :require_admin
  end

假设您的 ApplicationController::Authorization 模块具有 require_admin 的代码。我更喜欢这种方法而不是重写我的授权代码。记住在前面包含 :: 很棘手,因为说 include ApplicationController::... 会在 Rails::MailersController 命名空间内查找。