【问题标题】:How to create rack application to be used by Rails?如何创建 Rails 使用的机架应用程序?
【发布时间】:2013-03-01 04:21:45
【问题描述】:

Rails 本身基于多个独立进程,这些进程在请求之间是无状态的。我需要向我的 Rails 应用程序添加一个有状态的集中式服务(游戏自动机)。

据我所知,我应该让有状态服务成为机架应用程序。是否有一些关于如何制作机架应用程序以及重要的是如何从 Rails 与其通信的教程。用 Rails 部署它的惯用方式是什么,以及将它放在我的 git Rails 代码库中的惯用位置是什么?

【问题讨论】:

  • 我认为如果你能澄清你想要完成的事情会很有帮助。 Rack 严格来说只是一个接口,它定义了一个 ruby​​ 应用程序处理 HTTP 请求的合同。如果您可以提供有关“游戏自动机”应该做什么的更多详细信息,我可以提供更有用的答案。

标签: ruby-on-rails rack


【解决方案1】:

我的问题在另一个问题中得到了回答:

How to read POST data in rack request

require 'json'

class Greeter
  def call(env)
    req = Rack::Request.new(env)
    if req.post?
      puts req.POST()
    end
    [200, {"Content-Type" => "application/json"}, [{x:"Hello World!"}.to_json]]
  end
end

run Greeter.new

并使用JSON.parse( req.body.read ) 解析POST 数据。

【讨论】:

    【解决方案2】:

    机架以外的另一个选项是daemonize您的应用程序。

    【讨论】:

    • 据我所知,Rails 中间件是 Rails 请求处理的一部分。但这不是我想要的在 Rails 之外运行的单独进程。
    • 守护它仍然是一个有效的选择。您将有一个单独的进程在套接字或本地主机上提供数据,就像 memcached 一样
    • 如果你想独立于任何传入的 http 请求做一些事情,你将需要一个额外的过程。为什么要避免这种情况?或者,您可以在 Rails 进程中启动线程,但这可能是生产中令人头疼的问题。除了响应 http 请求之外,rails 进程不应该关心其他任何事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2020-08-29
    • 2014-12-25
    • 2014-05-12
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多