所以我尝试了运行rake任务:
heroku run:detached rake some_task --app myproductionapp
Heroku告诉我用heroku logs -p run.8334 -a myproductionapp
当我在控制台中运行该日志记录命令时,没有任何内容出现。这意味着任务没有运行(或者是吗?)。在专业dyno计划中,我有1个P_L级别的网络,1个1x级别的时钟和1个运行P_L级别的sidekiq dyno。我是否需要设置工作人员dyno?
测试它是否显而易见:
因此,当我使用Mailinator进行测试并调用我用于向用户发送一次电子邮件的函数时,我会收到一条实际的“已处理”消息,如下图所示,我在Mailinator中看到了电子邮件:
MyEmailer#send_this_message: processed outbound mail in 407.3ms
=> #<ActionMailer::Base::NullMail:0x007gg91b5700a0>
当我尝试生产时,我没有得到处理过的消息响应,我只得到如下的ActionMailer :: Base :: NullMail。
=> #<ActionMailer::Base::NullMail:0x007gg91b5700a0>
登台的邮件设置:
config.action_mailer.default_url_options = { :host => ENV['STAGING_HOST'] }
# ActionMailer Config
# Setup for production - deliveries, no errors raised
config.action_mailer.delivery_method = :smtp
#config.action_mailer.perform_deliveries = true
#config.action_mailer.raise_delivery_errors = false
#config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings = {
:address => "smtp.mandrillapp.com",
:port => 587,
:user_name => ENV['MANDRILLUSER'],
:password => ENV['MANDRILL_KEY'],
:domain => 'heroku.com'
生产的邮件设置:
# ActionMailer Config
# Setup for production - deliveries, no errors raised
config.action_mailer.delivery_method = :smtp
#config.action_mailer.perform_deliveries = true
#config.action_mailer.raise_delivery_errors = false
#config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings = {
:address => "smtp.mandrillapp.com",
:port => 587,
:user_name => ENV['MANDRILLUSER'],
:password => ENV['MANDRILL_KEY'],
:domain => 'productionapp.com',
:enable_startls_auto => true
}
答案 0 :(得分:1)
这很奇怪,但由于您的任务中出错,可能会发生这种情况,请检查整个日志heroku logs -a myproductionapp
为了回答你的问题,你不需要任何工作人员dyno,那些是后台工作,如果你手动运行任务然后你不需要工人,例如你安装“heroku scheduler”插件,那么你可以编程你的cron,无需工人就可以每隔一段时间运行一次任务。
感谢您添加到问题中的新详细信息,在生产配置中,您错过了主机,在您的暂存中:
config.action_mailer.default_url_options = { :host => ENV['STAGING_HOST'] }
你需要在这里添加你的生产主机,你可以手动添加它:
config.action_mailer.default_url_options = { :host => 'http://yourproductionapp.com' }
或使用环境变量:
config.action_mailer.default_url_options = { :host => ENV['PRODUCTION_HOST'] }
确保您的环境变量在heroku生产应用中具有正确的值。