Rails控制器长时间睡眠行为

时间:2012-11-12 20:01:20

标签: ruby-on-rails

当其中一条线需要很长时间时,Rails控制器会做什么?例如,其中一条线想要睡很长时间,比如10000秒:sleep(10000)。如果很多人使用该网站并调用此控制器方法,它是否会耗尽大量资源?

1 个答案:

答案 0 :(得分:1)

它将睡眠10000秒,从而一直阻止一个红宝石过程。

如果您的Web服务器设置为在此延迟之前超时,浏览器将呈现错误消息,但这不会停止Rails过程。

这里没有魔力。

睡眠时不会使用资源,但不会释放ruby进程所需的RAM。并且因为对于此操作的每个请求,一个进程被卡住,从max_nb_ruby_processes_on_your_server请求开始并行执行此操作,您的网站将对每个请求都没有响应,不再有Ruby进程可用于处理请求。

如果您要处理复杂的数据,通常最好通过rake task处理它,您将通过crontab或延迟作业异步调用