如何在一台服务器上运行多个小型Ruby(Rack)应用程序?

时间:2012-08-25 21:48:57

标签: ruby-on-rails ruby rack

我想在我的VPS服务器上运行多个(> 2)基于机架的小应用程序,这些应用程序已经运行了一个大型Rails应用程序。

Rails应用程序使用传统的“Unicorn + nginx”对,它需要我在VPS机器上拥有的大部分RAM资源。

我尝试为每个应用添加类似的Unicorn配置,这导致我的RAM资源不足。

所以我的问题是:是否可以设置一个小巧的内存节省服务器,允许一次运行所有Sinatra应用程序?

更新:如果重要,我不太关心性能。这些应用程序不打算做任何严肃的工作。

UPDATE2:基于与Nginx共享的套接字的方法优于具有端口的方法。

谢谢!

1 个答案:

答案 0 :(得分:5)

我对这个问题进行了自己的探索,我想我找到了一个解决方案,它允许我让一个网络服务器同时运行我所有的小应用程序。

它基于 RackStack 由Remi Taylor创建的not-a-gem( @remi 在Github上)https://github.com/remi/rack-stack

RackStack的灵感来自Rack :: Builder,它似乎也很适合完成这样的任务 - RackStack只是朝着同一个方向发展,以我发现非常好用的方式抽象“堆栈”功能。 / p>

以下是RackStack的演示,其中包含两个示例应用程序(Sinatra和Rack):https://github.com/stanislaw/skeletons/tree/master/rack_stack。为了模仿真实服务器上的堆栈应用程序行为,我修改了/ etc / hosts文件,使localhost2主机指向127.0.0.1。

我启动Thin服务器,然后在localhost或localhost2上运行请求:FirstApp为'localhost'提供请求,由SecondApp提供给'localhost2'。

当我在真实服务器上测试我的应用程序时,我现在无法预见会出现的任何问题,但现在这种方法似乎正是我所寻找的:我想,在真正的服务器上Nginx会将与我的机架应用程序关联的所有主机的请求传递给瘦服务器侦听的套接字。因此,RackStack只会满足那些发给我堆栈中的应用程序的请求。

对此计划或替代方案的任何建议,改进仍然表示赞赏!