如何侦听第三方应用程序触发的数据库更改

时间:2016-09-20 06:09:57

标签: ruby-on-rails rails-activerecord

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

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

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

Rails应用程序可以检测到已添加新记录,还是已编辑/删除现有记录?

2 个答案:

答案 0 :(得分:1)

我不习惯Ruby也不习惯PostgreSQL,但是这个案例的arquitechture非常相同。

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

然后你可以从PostgreSQL脚本中调用web服务来告诉Rails应用程序它是一个更新:

Postgresql - detect changes and call webservice

答案 1 :(得分:1)

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

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