【问题标题】:How to listen for database changes triggered by a 3rd party application如何侦听由 3rd 方应用程序触发的数据库更改
【发布时间】:2016-09-20 06:09:56
【问题描述】:

我需要将 Ruby on Rails 应用程序与第 3 方应用程序集成,这将共享一个通用 PostgreSQL 数据库。也就是说,Rails 应用程序和第 3 方应用程序都将使用相同的 PG 数据库。

是否可以在 Rails 应用程序中设置监听器,以便在第 3 方应用程序添加、编辑或删除数据库记录时触发事件?

例如,假设我在 Rails 中定义了一个 Book 模型,并且第 3 方应用程序在数据库的 Book 表中添加了一个新行(不是通过 BooksController)。

Rails 应用程序能否检测到已添加新记录,或已编辑/删除现有记录?

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:

    我不习惯 Ruby 或 PostgreSQL,但这种情况下的架构大同小异。

    我认为你应该使用触发器来监听 bbdd 的变化: https://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html

    然后你可以从那个 PostgreSQL 脚本调用一个 web 服务来告诉 Rails 应用它已经更新了:

    Postgresql - detect changes and call webservice

    【讨论】:

      【解决方案2】:

      这就是我最终所做的:使用Whenever,因为它与 Capistrano 很好地集成,并向我展示了如何在 cron 中运行 Rails 代码。我失去的和平基本上是

      script/runner -e production 'ChangeObserver.recentchanges' 现在每 5 分钟运行一次。最近的更改从 tmp 文件中读取最后查看的 ID,提取所有具有更高 ID 的新更改记录,并为每个记录运行正常的观察者代码(并将最高查看的 ID 保存到 tmp 文件,当然)。

      【讨论】:

        猜你喜欢
        • 2016-10-13
        • 1970-01-01
        • 1970-01-01
        • 2019-05-14
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2018-11-13
        • 1970-01-01
        相关资源
        最近更新 更多