2016-02-18 78 views
1

所以我試圖運行rake任務:爲什麼這個rake任務似乎沒有在Heroku中運行?

heroku run:detached rake some_task --app myproductionapp 

Heroku的告訴我,當我跑在我的控制檯登錄命令,似乎沒什麼用heroku logs -p run.8334 -a myproductionapp

查看日誌。這意味着任務沒有運行(或者沒有?)。在專業的測功機方案中,我在P_L級有1個網絡,在1x級有1個時鐘,在P_L級有1個sidekiq 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

你能分享任務嗎?你怎麼知道它沒有運行?你期待它寫入日誌文件嗎? – wpp

+0

@wpp我期待它通過Mandrill發送幾百封電子郵件,並且這些電子郵件不會被髮送(我會在Mandrill儀表板中看到一個尖峯)。當我設置臨時環境時,他們正在發送。 – Nona

+0

我根據您在問題中添加的內容更新了我的答案,請考慮將我的答案標記爲已接受。 – SsouLlesS

回答

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製作應用程序中具有正確的值。

+0

我看到類似'2016年2月18日2:00:01.184 2016-02-18 21:34:55.100786 + 00:00 heroku api - 使用命令'bundle exec rake myproductionapp'通過[email protected]啓動進程Context'但沒有失敗指示。我通過Airbrake發出錯誤通知,但沒有出現錯誤。 – Nona

+0

那麼檢查你使用的電子郵件,我之前有類似的問題,我檢查了用於發送郵件的電子郵件不存在,很可能有幾個原因,沒有更多的信息是不可能的,以幫助你。 – SsouLlesS

+0

嗨SsoulLesS,我更新了上下文?上面...由於某種原因,它在舞臺上工作,但不在生產上...... – Nona