2012-03-11 134 views
3

我有一个用Rails编写的应用程序,部署在Heroku上。我以前一直在使用1台网络测试仪,但是今天我发布了这个应用程序,流量很大,所以我决定增加4台网络测试仪和1台工作台测试仪。我不知道为什么总是当我做heroku ps它表明:Heroku dyno/worker开始崩溃

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 

工人赛道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的逻辑是什么?我已阅读文档次数,但我仍然认为我错过了理解它的观点,因为我在世界上长大,在这个世界里你有存储限制和东西。

回答

2

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

德克必须排队,工人们应该检查队列来完成这项工作!

因此,您的工作人员崩溃,因为您没有定义任何作业,所以他可以等待该作业的队列。查看这个gem了解如何设置作业和队列任务的信息。

https://github.com/defunkt/resque

另一件事,工人可用于它安排一些任务,比如cron作业。这是一个寻求帮助的宝石。

https://github.com/javan/whenever

我强烈建议你观看RailsCasts

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

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

+0

这解释了很多这太视频。非常感谢你的回答! – 2012-03-12 00:28:07

+0

我很高兴能帮上忙。我害怕我的英语技能不足以解释它。 – 2012-03-12 00:35:11