当生产域未知/已解决时,Rails 中 ActionMailer 的最佳实践?

问题描述

我正在从事一个业余项目,并且已经达到了我接下来两个最重要的功能中的任何一个都需要发送电子邮件的地步,而我在网上找到的所有指南似乎都在这个地方掩盖了许多看似重要的功能详情。

我的开发环境是 Windows + Rubymine。 我的生产环境将是 Heroku。 (可能还有 SendGrid,也可能是 Mailgun,仍在评估中)。我还没有真正的域名,仍在那里评估/工作购物的几个选项。如果该解决方案可以在我获得实际域名之前使用 herokuapp 域名,那就太好了。

如果重要的话,这很可能是一个开源项目。即可能有多个开发者,并非所有开发者都在同一个域名下。

这感觉就像邮件配置的开发认值应该是 gmail,每个开发人员通过环境变量配置他们自己的 authentication/2-factor/apppkey。而 prod 具有所选服务提供商的配置/通过环境变量具有身份验证详细信息。

这是一个合理的方法吗?我觉得这很常见,我本来希望有一些很棒的指南来解决它,但似乎所有人都假设您将在 dev 和 prod 中使用相同的实现,并且您已经知道您的 prod 交付系统和域名。

解决方法

邮件配置的开发默认应该是gmail

开发默认值应该类似于 letter_opener gem。不要从您的开发设置发送邮件。

prod 通过环境变量对所选服务进行配置

绝对正确。 ENV 变量以及 Rails 机密和 yaml 配置文件。我个人的偏好是使用来自 ENV 的内插值的 yaml 文件(都用于非秘密配置,由 class Main { public static void main(String args[]) { for(int i = 1 ; i<6 ; i++){ for(int j = 1 ; j<6 ; j++){ for(int k = 1 ; k<6 ; k++){ if( !(i == j || i == k || j==k )){ // No repetition allowed System.out.print(i+" "+j+" "+k+","); } } } } } } 和秘密文件读取):

Rails.application.config_for
# config/action_mailer.yml
production:
  smtp_server: some-value
  smtp_password: <%= Rails.application.secrets.smtp_password %>

通过这种方式,您可以抽象出配置的来源。例如,您可以在生产中推送一个完全替换的机密文件,而不是在 ENV 中注入任何内容,应用程序也不需要知道其中的区别。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...