我有两个neo4j数据库在两个不同的主机上运行。在生成应用程序时,我将rails应用程序连接到其中一个。现在我想使用其他数据库以及应用程序。如何配置应用程序以连接到这两个数据库?
目前没有一种好的方法可以将一个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
正如Brian目前提到的,我们不能将一个Ruby进程配置为同时使用两个会话。我们必须通过设置Neo4j::ActiveBase.current_session
来管理会话(请参见:https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/active_base.rb)
neo4j.yml
为您在枕木中设置Neo4j::ActiveBase.current_session
。如果在应用程序启动后设置Neo4j::ActiveBase.current_session
,它将覆盖neo4j.yml
中的内容。current_session
需要是来自neo4j核心gem的Neo4j::Core::CypherSession
对象。(请参阅自述文件:https://github.com/neo4jrb/neo4j-core)
还要记住,目前neo4j不支持为每个模型拥有不同的会话。所以,如果在模型中设置会话,您可能会遇到问题。更好的方法是在应用程序的正常运行时设置会话。您可能还希望包装Neo4j::Core::CypherSession
以获得查询代理,而不是Neo4j::Core objects
。为此,您必须在声明适配器时指定wrap_level: :proc
。(参考:https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/session_manager.rb#L14)
总之,以下是你需要做的
http_adaptor = Neo4j::Core::CypherSession::Adaptors::HTTP.new('http://neo4j:7474',{wrap_level: :proc})
Neo4j::ActiveBase.current_session = Neo4j::Core::CypherSession.new(http_adaptor)
这将在'http://neo4j:7474'
中建立与所需数据库的封装会话