希望将非Ruby服务器进程集成到Rails应用程序中

时间:2013-06-24 22:51:56

标签: ruby-on-rails nginx soa haskell-snap-framework

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

在这种情况下,最好的整合策略是什么?我是否应该设置Rails控制器向Haskell Web应用程序发出Web请求,然后将响应转发给客户端,或者使用Rack中间件或Nginx配置是否有更有效的方法来执行此操作?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在子目录中使用nginx的反向代理。例如(基于this question):

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应用程序的数据,您可能会发现更容易实现您制作自己的代理控制器的第一个建议,因为这样您就可以使用在调用Haskell应用程序之前,Rails应用程序的登录逻辑。