8

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

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

我尝试为每个应用程序添加类似的独角兽配置,这导致我内存资源不足。

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

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

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

谢谢!

4

1 回答 1

5

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

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

RackStack 受到 Rack::Builder 的启发,它似乎也很适合完成这样的任务——RackStack 只是朝着同一个方向走得更远,以一种我觉得非常好用和方便的方式抽象“堆栈”功能。

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

我启动瘦服务器,然后在 localhost 或 localhost2 上运行请求:对“localhost”的请求由 FirstApp 提供,而对“localhost2”的请求由 SecondApp 提供。

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

对此方案或替代方案的任何建议、改进仍不胜感激!

于 2012-08-26T21:47:56.640 回答