为同一个应用运行多个rails服务器

时间:2012-03-10 15:56:15

标签: ruby-on-rails ruby-on-rails-3

所以我想知道,Heroku可以运行多个dynos来处理越来越多的请求。这种可扩展性是最重要的价值主张之一。

本地有类似的东西吗?基本上,我正在开发一个应用程序,它运行了很多我正在测试的请求和计算。目前,大部分计算都是由rails服务器运行的,因此加载带有已排序材料的页面的请求可能需要一分钟或更长时间。最后我将使用delayed_job将这些计算移动到后台,但我仍在开发算法,所以我还没有尝试进行更改。

所以我想知道的是,我可以运行多个rails服务器,以便我可以点击一个网站,另一个运行这些计算吗?我尝试在不同的端口上打开两个,但它们并不能同时运行(几乎没有运行)。

非常感谢任何建议!

3 个答案:

答案 0 :(得分:1)

我的建议是立即开始使用后台作业方法。你要做的就是在后台运行相同的代码。你应该能在5分钟内完成。现在你可能花了很多时间在可以花在代码上的其他解决方案上。一旦你开始使用delayedJob,bachgrouddrb或其他选项,你就不会回头了 这里有一篇好帖子可以帮到你:
http://www.tobinharris.com/past/2009/3/9/6-ways-to-run-background-jobs-in-rubyonrails/以及 Ruby on Rails: How to run things in the background?

答案 1 :(得分:0)

是的你可以通过以下方式来做到这一点:

$ for port in `seq 3000 3005`; do run server --on-port $port; done

然后你将在3000到3005的端口上有5个服务器。然后使用一些反向代理来捕获一个端口上的所有请求,然后将它们发送到服务器。

您也可以尝试foreman来执行此操作,但是如果您需要执行此操作以进行测试,则应用程序设计中的某些内容出现问题,而不是在服务器中。也许你应该将一些任务移到例如EventMachine并在外部进程中运行它们(例如生成一些文档或解析数据)。

答案 2 :(得分:0)

我会回应那些说最终将你的计算分成工人的人。我建议将Resque视为delayed_job的替代方案。我们将 Resque 与开发中的 RedisToGo 以及我们所有基于Heroku的生产应用程序结合使用。我们Euclid Inc.是Heroku和Redis的忠实粉丝。

与此同时,您可以使用 Unicorn Foreman 在开发过程中获得类似dyno的行为。我们再次使用Unicorn进行生产,使我们基于Heroku的应用程序更加高效。

Unicorn易于配置。只需设置添加适当的gem并创建一个Procfile,就可以获得多个进程而无需更改代码。

相关问题