2016-07-04 76 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

相關問題