2017-02-10 7 views
0

두 개의 다른 호스트에서 실행되는 두 개의 neo4j 데이터베이스가 있습니다. 앱을 생성하는 동안 내 레일 앱을 그들 중 하나에 연결했습니다. 지금은 다른 데이터베이스뿐만 아니라 응용 프로그램과 함께 사용하고 싶습니다. 두 데이터베이스에 모두 연결하도록 앱을 구성하려면 어떻게해야합니까?단일 레일 애플리케이션에서 두 개의 neo4j 데이터베이스 사용

답변

0

동시에 두 세션을 사용하도록 하나의 Ruby 프로세스를 구성하는 좋은 방법은 현재 없습니다. Rails를 사용하는 경우 NEO4J_URL 환경 변수를 설정하여 서버를 변경할 수 있습니다. 그렇지 않으면 Neo4j :: ActiveBase.current_session 또는 Neo4j :: ActiveBase.on_establish_session을 설정하여 세션을 관리해야합니다 (멀티 스레드 프로세스를 실행하는 경우 필요할 수있는 각각의 새 스레드에 대한 세션을 설정합니다)

은 참조 : https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/active_base.rb

0

브라이언은 현재 우리가 같은 시간에 두 개의 세션을 사용하는 하나 개의 루비 프로세스를 구성 할 수 없습니다 언급 한 바와 같이. 우리는 Neo4j::ActiveBase.current_session을 설정하여 세션을 관리해야합니다 (참조 : https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/active_base.rb를)

neo4j.yml은 railtie에 당신을 위해 Neo4j::ActiveBase.current_session을 설정합니다. 앱이 시작된 후에 Neo4j::ActiveBase.current_session을 설정하면 neo4j.yml에 있던 내용보다 우선 적용됩니다. current_session은 neo4j-core gem의 Neo4j::Core::CypherSession 오브젝트 여야합니다. (readme : https://github.com/neo4jrb/neo4j-core)

또한 neo4j는 각 모델마다 다른 세션을 지원하지 않습니다. 따라서 모델 내부에서 세션을 설정하면 문제가 발생할 수 있습니다. 더 나은 방법은 앱의 정상 런타임에서 세션을 설정하는 것입니다. Neo4j::Core::CypherSession을 포장하여 Neo4j::Core objects 대신 Query Proxy를 가져 오려고 할 수도 있습니다. 여기에 어댑터를 선언하는 동안 wrap_level: :proc을 지정해야합니다. (참조 : https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/session_manager.rb#L14)을

을 그래서 모두 여기에 당신이 'http://neo4j:7474'

에서 원하는 데이터베이스와 랩 세션을 설정합니다

http_adaptor = Neo4j::Core::CypherSession::Adaptors::HTTP.new('http://neo4j:7474',{wrap_level: :proc}) Neo4j::ActiveBase.current_session = Neo4j::Core::CypherSession.new(http_adaptor)

이 작업을 수행해야 할 것입니다