Heroku耙过程早退出,不完全运行

时间:2015-01-17 17:07:21

标签: ruby-on-rails heroku

我有一个用于Heroku Scheduler的rake任务。我的问题是,当我在Heroku上运行rake任务时,进程永远不会完全完成,而是提前退出。

我要做的是对数组的每个成员执行操作。这个阵列有4,500个项目。我的Action模型上的函数是这样的:

def my_rake_task(some_array)
    i = 0
    while i < some_array.count do
        puts "#{i} number in {some_array[i]}"
        i += 1
    end
end 

并在scheduler.rake中设置,如:

desc "Run my rake task"
task :my_rake_task => :environment do
    Action.my_rake_task
end

当我在本地运行时,一切都很好,我会看到阵列中的所有4,500个项目都正确输出。当我推送到Heroku并通过Heroku run rake my_rake_task检查它时,它将输出约1,000到约1,600行,然后停止。

我的日志如下:

2015-01-17T16:44:28.259815+00:00 heroku[api]: Starting process with command `bundle exec rake my_rake_task` by my_user_name
2015-01-17T16:44:31.729533+00:00 heroku[run.8495]: Awaiting client
2015-01-17T16:44:31.765515+00:00 heroku[run.8495]: Starting process with command `bundle exec rake my_rake_task`
2015-01-17T16:44:32.155205+00:00 heroku[run.8495]: State changed from starting to up
2015-01-17T16:45:31.914275+00:00 heroku[run.8495]: State changed from up to complete
2015-01-17T16:45:31.896364+00:00 heroku[run.8495]: Process exited with status 0

我想知道这是否因为我只使用一个dyno?或者,如果还有其他原因?非常感谢任何见解。

1 个答案:

答案 0 :(得分:0)

基于您提供的有限信息,我为您提供了一些解决方案,可以确保您的任务按预期运行。

首先,当您在Heroku上运行rake任务时,特别是如果它们是长时间运行的任务,请将它们分离运行。这将确保与终端的连接不会干扰任务。例如,如果在任务完成之前关闭终端,它将提前结束它。

heroku run:detached rake my_rake_task

其次,如果您正在检查日志并且只看到~1600行输出,请确保您要求更多日志:

heroku logs -n 5000

第三,你应该使用delayed_job https://github.com/collectiveidea/delayed_job 将所有内容放入队列,在工作人员dynos上运行任务,具有错误报告以及每个任务/作业的完整日志。您可以在http://railscasts.com/episodes/171-delayed-job

查看延迟作业的投射轨道