为什么这个rake任务似乎没有在Heroku中运行?

时间:2016-02-18 20:05:19

标签: ruby-on-rails heroku

所以我尝试了运行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
  }

1 个答案:

答案 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生产应用中具有正确的值。