假设你有一个在Rails中有动作的邮件程序,使用delay
从某个模型调用,例如:
class ReportMailer < ActionMailer::Base
default from: "hello@shopstar.co.za"
def order_received(order)
@order = order
mail(:to => @order.shop.email, :subject => "You have a new order on Shopstar")
end
end
order.rb:
if self.shop.email_preference.on_order?
ReportMailer.delay.order_received(self) unless self.source == "pos"
end
这会从开发环境发送邮件吗?
和
这会在生产版本中发送邮件吗?
答案 0 :(得分:3)
延迟工作的工人需要运行,
用于开发模式运行:
RAILS_ENV=development bin/delayed_job start
在制作中你应该运行:
RAILS_ENV=production bin/delayed_job start
Rails 4 的上述命令,对于 Rails 3 ,您应该这样做:
script/delayed_job
代替bin/delayed_job
检查delayed_jobs页面以获取更多details
答案 1 :(得分:0)
这会从开发环境发送邮件吗? 这会在生产版本中发送邮件吗?
全部取决于每个文件中的环境smtp设置(development.rb,production.rb)
要在您的环境中使用延迟作业,需要运行工作人员在后台处理此问题。尝试看看foreman gem来帮助你运行服务器和工人只需使用工头启动。
答案 2 :(得分:0)
如果环境配置未更改,则不会在开发中发送电子邮件,并且会在生产中发送电子邮件。
您应该在config/environments/development.rb
中看到类似的内容:
config.action_mailer.perform_deliveries = false
这可以防止在您的开发环境中发送电子邮件。您可以在configuration guide
中找到有关动作邮件的配置选项的更多详细信息不要忘记,如果您要延迟发送消息,那么您也需要处理延迟的工作。
答案 3 :(得分:0)
这会从开发环境发送邮件吗?
它会根据您的STMP设置发送电子邮件
Rails具有config.action_mailer
的设置,您可以在config/environments/development.rb
&amp; config/environments/production.rb
:
#config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "************.co.uk",
:user_name => "****@gmail.com",
:password => ENV["gmail"],
:authentication => :plain,
:enable_starttls_auto => true
}
config.action_mailer.default_url_options = { :host => "localhost:3000"}
无论您运行的是哪个环境delayed_job
,都需要确保在环境配置文件中设置了这些详细信息
答案 4 :(得分:0)
首先让我回答您的第二个问题,即从您的系统发送邮件是否实时/开发,您需要smtp设置。对于SMTP设置示例,您可以查看http://guides.rubyonrails.org/action_mailer_basics.html。
其次,此配置设置位于其中一个环境文件中。它在哪个环境文件中取决于您的应用程序运行的环境。如果您的实时服务器在开发环境中运行,那么这些更改将在config/environments/development.rb
希望澄清。