[英]Use two neo4j databases in single rails app
我有两个在两个不同主机上运行的neo4j数据库。 在生成应用程序时,我将Rails应用程序连接到其中之一。 现在,我想在应用程序中同时使用其他数据库。 如何配置应用程序以连接到两个数据库?
当前没有一种好的方法来配置一个Ruby进程以同时使用两个会话。 如果使用的是Rails,则可以通过设置NEO4J_URL环境变量来更改服务器。 否则,您需要通过设置Neo4j :: ActiveBase.current_session或Neo4j :: ActiveBase.on_ Establishment_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
会在Railtie中为您设置Neo4j::ActiveBase.current_session
。 如果在应用程序启动后设置Neo4j::ActiveBase.current_session
,它将覆盖neo4j.yml
中的neo4j.yml
。 current_session
必须是neo4j-core 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'
的所需数据库建立一个包装的会话
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.