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

는 그리고이 인쇄됩니다. 나는이 동일한 훅이 두 응용 프로그램 (그들은 모두 동일한 데이터베이스에 연결)에 정의되어있는 경우

나는 그들의 하나 레코드를 삽입 모두 응용 프로그램에서 실행할 수 있습니까?

나는 푸셔를 사용하려고 생각하고 있지만 Datamapper 또는 ActiveRecord를 단독으로 사용하는 방법이 있는지 궁금합니다.

여기서는 DataMapper와 SQLite3을 사용하고 있지만 필요한 경우 다른 ORM/db로 전환 할 수 있습니다.

답변

1

활성 레코드의 라이프 사이클 이벤트는 응용 프로그램 수준에서 구현되므로 응용 프로그램에 지역화됩니다. 나는 Datamapper가 비슷한 방식으로 작동하도록 제안합니다. 두 개의 서로 다른 응용 프로그램에 경고가 필요하면 일종의 외부 메시징 시스템이 필요합니다. 나는 당신이 메시지 버스를 필요로한다면 RabbitMQ를 바라 볼 것을 제안 할 것이다. 데이터베이스에서 일을 유지하고 싶다면 postgresql에는 활성 레코드로 어떻게 재생되는지 모르겠지만 NOTIFY (https://www.postgresql.org/docs/9.0/static/sql-notify.html)라는 기능이 있습니다.

+0

이 제안에 감사드립니다. 나는 지금 페이를 더하고있다. –

+0

내 앱 중 하나가 명령 행 스크립트이므로 메시지 버스 서버를 건너 뛰고 stdin/stdout을 통해 데이터를 전달했습니다. Faye는 작동하지 않았고 rabbitmq는이 프로젝트에 약간의 도움이 필요해 보인다. –

+0

OS 레벨이므로 stdin/stdout을 메시지 버스로 사용하는 데주의해야한다. 너는 몇몇 불쾌한 십자가 플래트 홈 문제점을 폭로 할 수 있었다. Zero MQ를 고려하셨습니까? 단일 서버를 버스로 사용하지 않고 메시지를 직접 전달할 수 있습니다. – Stewart