通常在轨道中,我们可以配置smtp设置,如下所示:
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "anythingworks",
:user_name => "mygmailaddress@gmail.com",
:password => "somePW",
:authentication => "plain",
:enable_starttls_auto => true
}
但是我需要将来自数据库值的多个连接设置为 smtp,如果数据库中没有值,则应使用默认的 smtp 设置。
我怎样才能做到这一点?
只需根据数据库值进行设置,例如:
ActionMailer::Base.smtp_settings = {
:address => Setting.find_by(key: :smtp_address)&.value || 'smtp.gmail.com',
:port => 587,
:domain => "anythingworks",
:user_name => "mygmailaddress@gmail.com",
:password => "somePW",
:authentication => "plain",
:enable_starttls_auto => true
}
这假设您有一个名为"settings"的数据库表,其中包含key
和value
列,因此您可以在其中设置任何通用配置,每条记录一个配置项。以及用于访问它的 ActiveRecord 类设置。
如果该设置不存在或该值为 null,它将回退到硬编码值。
另一件事是确保此配置代码是在启动周期中已经存在 ActiveRecord 的某个点建立的。例如,您可以将其放在config/initializers/mail.rb
中。