2016-07-04 10 views
1

我有两个连接到同一个数据库的应用程序。在连接到数据库的所有应用程序上调用钩子

我写了一个数据库挂钩,像这样:

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 

,这将打印出一旦它创建记录属性。

如果我有两个应用程序(它们都连接到同一个数据库)中定义此完全相同挂钩,我可以得到它的两个的应用程序时,其中一个插入一条记录运行?

我在想使用Pusher,但我想知道是否有一种方法可以使用Datamapper或ActiveRecord自行完成。

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

回答

1

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

+0

感谢您的建议。我正在努力添加Faye。 –

+0

由于我的一个应用程序是一个命令行脚本,我最终跳过了消息总线服务器并通过stdin/stdout传递数据。 Faye没有工作,rabbitmq似乎有点太重,因为这个项目需要 –

+0

因为他们是操作系统级别,所以我会谨慎使用stdin/stdout作为消息总线。你可以发现一些讨厌的跨平台问题。你有没有考虑过零MQ?您可以直接传递消息,而只需将一台服务器用作总线。 – Stewart

相关问题