0

我有一个生产 Rails 应用程序,我想尽可能无缝地集成一个非 Rails、非 Ruby 服务器进程。也就是说,我希望某些路由由运行在与 Rails 应用程序相同的服务器上的 Haskell Snap Web 应用程序来处理。这些路由都将返回 JSON 有效负载,因此没有模板复杂性。但是我想避免设置 CORS 的开销,所以我希望这些 JSON 响应看起来好像它们来自与 Rails 生成的网页相同的来源。

在这种情况下,最好的集成策略是什么?我应该设置 Rails 控制器来向 Haskell Web 应用程序发出 Web 请求,然后将响应转发给客户端,还是有更有效的方法来使用 Rack 中间件或 Nginx 配置来做到这一点?

4

1 回答 1

1

最简单的方法是在子目录上使用 nginx 的反向代理。例如(基于这个问题):

location /snap {
    rewrite /snap/(.*) /$1 break;
    proxy_pass http://localhost:8000;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

切换localhost:8000到运行 Snap 应用程序的位置。

您还可以将目录名称更改为snap您想要的任何名称。只需确保在它出现的两个地方都对其进行了更改,并且它不会与您的 RoR 应用程序中的任何路由冲突。


但是,如果您想通过 Ruby 应用程序使用身份验证/授权来访问 Haskell 应用程序的数据,您可能会发现更容易实现您的第一个建议,即制作自己的代理控制器,因为这将允许您使用 Rails 应用程序的登录调用 Haskell 应用程序之前的逻辑。

于 2013-06-24T23:03:25.933 回答