【问题标题】:Partial migration from Rails to Phoenix从 Rails 部分迁移到 Phoenix
【发布时间】:2018-01-28 23:09:42
【问题描述】:

我有一个 rails 应用程序,我想逐步将其移至 Phoenix。当我实现功能时,我希望 phoenix 拦截已经实现的请求,同时将未知请求传递给 Rails 应用程序。在这种情况下,最好的策略是什么?

1) 如果我准备好接受一些开销,我可以创建一个插件并将所有未知请求路由到那里(最后一个路由/*path)。但是我如何完整地传递请求并返回响应?解析它,然后用 HTTPoison 再次构建会通过不必要的工作,有更好的想法吗?

2) 我不确定是否可以使用 haproxy,但旧应用程序可能是一个后备应用程序,如果主后端响应一些错误,请求将被传递。这会减少开销吗?

3) 最后,我可以在 haproxy 中通过掩码拆分请求,但这似乎需要做很多工作,因为我计划将 rails 用于 CUD 操作,将 phoenix 用于 R 以获得一些资源。

还有其他选择吗?示例有人如何做到这一点?谢谢!

【问题讨论】:

    标签: ruby-on-rails backend phoenix-framework


    【解决方案1】:

    阅读一篇关于您的确切问题的优秀帖子here。 基本思想是使用 gem rails-reverse-proxy 为您的 Phoenix 应用程序定义代理。

    然后,在 Phoenix 上开发您的功能,并添加必要的路线。遵守 Rails 约定(无论如何,这都是 phoenix 路由器的工作方式)。

    将您的 Rails 应用程序与“虚拟”控制器连接起来,并将其设置为使用 rails-reverse-proxy。

    建议您将 Phoenix 应用程序拥有的所有 ActiveRecord 模型设为只读。通过在 phoonix 拥有的模型上添加挂钩 after_initialize :readonly!。这样您就可以在 Rails 中使用模型,而不会损害 phoenix 的所有权。只有 Phoenix 应用可以更改模型状态。

    【讨论】:

    • 好吧,我想使用 phoenix 作为代理,因为它要快得多,我可以使用 reverse-proxy 包和一些定制的插件来做到这一点,该插件根据路由决定将请求发送到哪里和方法。
    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2011-07-30
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多