【问题标题】:How to run multiple tiny Ruby (Rack) apps on one server?如何在一台服务器上运行多个小型 Rub​​y (Rack) 应用程序?
【发布时间】:2012-08-20 23:50:20
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

  • 为什么不在与主应用相同的独角兽上运行应用?只需将路线破解到 rackup 文件中。
  • 是的,我也想过这个。以及关于建立中间件链。问题 - 这将导致逻辑​​不一致 - 我所有的应用程序都没有以任何方式相互关联。
  • 这里有趣的是找到一种“在一个服务器上拥有多个微型 Rack 应用程序”的方法。我想知道,一般情况下是否可能。
  • “逻辑不一致”?你刚才说每个应用一个服务器不行,那你还有什么选择?
  • 我也不懂。为什么您认为使用 unicorn 运行应用需要应用相互关联?

标签: ruby-on-rails ruby rack


【解决方案1】:

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

它基于 Remi Taylor(Github 上的@remihttps://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 将只满足那些针对我堆栈中的应用程序的请求。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 2019-01-26
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多