在连接到数据库的所有应用程序上调用挂钩

Calling hooks on all applications connected to a database

我有两个连接到同一个数据库的应用程序。

我写了一个数据库挂钩:

def call_side_effect(record)
  puts record
  # my application actually does something more complicated here
end

class Verb
  include DataMapper::Resource
  property :id,         Serial
  property :name,       String
  before(:save) { |record| call_side_effect(record) }
end

这将在记录创建后打印出记录属性。

如果我在两个应用程序中定义了这个完全相同的挂钩(并且它们都连接到同一个数据库),我可以在 both 应用程序上将它获取到 运行当 其中一个 插入一条记录时?

我正在考虑使用 Pusher,但我想知道是否有办法单独使用 Datamapper 或 ActiveRecord。

我在这里使用 DataMapper 和 SQLite3,但如果需要可以切换到不同的 ORM/db。

Active Record 的生命周期事件是在应用程序级别实现的,因此将本地化到应用程序。我建议 Datamapper 以类似的方式工作。如果您希望提醒两个不同的应用程序,您将需要某种外部消息传递系统。如果您需要消息总线,我建议您查看 RabbitMQ。如果你想保留数据库中的内容,postgresql 有一个名为 NOTIFY(https://www.postgresql.org/docs/9.0/static/sql-notify.html) 的功能,虽然我不确定它如何与活动记录一起使用,但它可能会有一些用处。