首页 文章

Heroku dyno / worker在开始时崩溃

提问于
浏览
3

我有一个用Rails编写的应用程序,部署在Heroku上 . 我曾经在一个网络dyno上工作,但今天我发布了应用程序,流量非常大,所以我决定增加到4个网络dynos和1个工作人员dynos . 我不知道为什么总是当我做 heroku ps 它显示:

Process   State           Command                            
--------  --------------  ---------------------------------  
web.1     up for 22s      bundle exec rails server -p $PORT  
web.2     up for 36s      bundle exec rails server -p $PORT  
web.3     up for 25s      bundle exec rails server -p $PORT  
web.4     up for 22s      bundle exec rails server -p $PORT  
worker.1  crashed for 7s  bundle exec rake jobs:work

Worker dyno在 heroku scale worker=1 之后直接崩溃 . 日志就像:

2012-03-11T23:12:18+00:00 heroku[worker.1]: Starting process with command `bundle exec rake jobs:work`
2012-03-11T23:12:19+00:00 heroku[worker.1]: State changed from starting to up
2012-03-11T23:12:22+00:00 app[worker.1]: rake aborted!
2012-03-11T23:12:22+00:00 app[worker.1]: Don't know how to build task 'jobs:work'
2012-03-11T23:12:22+00:00 app[worker.1]: 
2012-03-11T23:12:22+00:00 app[worker.1]: (See full trace by running task with --trace)
2012-03-11T23:12:23+00:00 heroku[worker.1]: Process exited with status 1
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from up to crashed
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from crashed to created
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from created to starting
2012-03-11T23:12:32+00:00 heroku[worker.1]: Starting process with command `bundle exec rake jobs:work`
2012-03-11T23:12:32+00:00 heroku[worker.1]: State changed from starting to up
2012-03-11T23:12:36+00:00 app[worker.1]: rake aborted!
2012-03-11T23:12:36+00:00 app[worker.1]: Don't know how to build task 'jobs:work'
2012-03-11T23:12:36+00:00 app[worker.1]: 
2012-03-11T23:12:36+00:00 app[worker.1]: (See full trace by running task with --trace)
2012-03-11T23:12:37+00:00 heroku[worker.1]: Process exited with status 1
2012-03-11T23:12:37+00:00 heroku[worker.1]: State changed from up to crashed

而已 . 你知道为什么吗? Web dynos工作正常 . 我是否必须在我的应用程序中配置某些内容以使用工作人员dynos?

如果你能用人类的话来解释我将heroku平台划分为网络和工作人员dynos的逻辑,我将不胜感激?我已经阅读了文档次数,但我仍然认为我错过了理解它的观点,因为我在你有存储限制和东西的世界里长大 .

1 回答

  • 2

    工作人员用于后台处理,例如,发送电子邮件,从某些Web服务获取数据,通常用于任何需要很长时间的任务,并且您不希望用户等待它查看页面 . 这是一个应该用于性能的思考,因为如果你使用web dynos发送10个电子邮件,那么他们就没有响应用户请求,所以你无法处理这么多用户 .

    Taks必须排队,工作人员应检查该队列以完成该工作!

    因此,您的工作人员因为没有定义任何工作而崩溃,因此他可以等待该工作的队列 . 检查此gem以获取有关如何设置作业和队列任务的信息 .

    https://github.com/defunkt/resque

    Worker 可以用来安排一些任务的另一件事,比如cron工作 . 这是一个宝石的帮助 .

    https://github.com/javan/whenever

    我强烈建议你在RailsCasts上观看这个视频

    http://railscasts.com/episodes/171-delayed-job

    http://railscasts.com/episodes/271-resque

相关问题