我需要将Ruby on Rails应用程序与第三方应用程序集成,该应用程序将共享一个共同的PostgreSQL数据库。也就是说,Rails应用程序和第三方应用程序都将使用相同的PG数据库。
是否可以在Rails应用程序中设置侦听器,以便在第三方应用程序添加,编辑或删除数据库记录时触发事件?
例如,假设我在Rails中定义了Book
模型,第三方应用程序在数据库的Book表中添加了一个新行(不是通过BooksController
)。
Rails应用程序可以检测到已添加新记录,还是已编辑/删除现有记录?
答案 0 :(得分:1)
我不习惯Ruby也不习惯PostgreSQL,但是这个案例的arquitechture非常相同。
我认为您应该使用触发器来监听bbdd的更改: https://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html
然后你可以从PostgreSQL脚本中调用web服务来告诉Rails应用程序它是一个更新:
答案 1 :(得分:1)
这就是我最终做的:使用Whenever,因为它与Capistrano很好地集成,并向我展示了如何从cron中运行Rails代码。我失去的和平基本上是
script / runner -e production'ChangeObserver.recentchanges' 现在每5分钟运行一次。最近的更改从tmp文件中读取最后一个查找的ID,提取所有具有更高ID的新更改记录,并为每个记录运行正常的观察者代码(并将最高的查找ID保存到tmp文件中) ,当然)。