在单个 rails 应用程序中使用两个 neo4j 数据库
Use two neo4j databases in single rails app
我在两个不同的主机上有两个 neo4j 数据库 运行。我在生成应用程序时将我的 rails 应用程序连接到其中一个。现在我想在应用程序中使用其他数据库。如何配置应用程序以连接到两个数据库?
目前没有一种好的方法可以配置一个 Ruby 进程同时使用两个会话。如果您使用 Rails,您可以通过设置 NEO4J_URL 环境变量来更改服务器。否则,您需要通过设置 Neo4j::ActiveBase.current_session 或 Neo4j::ActiveBase.on_establish_session 来管理会话(这将为每个新线程设置会话,如果你是 运行 一个 multi-threaded 进程)
参见: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
中的内容。 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'
中所需的数据库建立一个包装会话
我在两个不同的主机上有两个 neo4j 数据库 运行。我在生成应用程序时将我的 rails 应用程序连接到其中一个。现在我想在应用程序中使用其他数据库。如何配置应用程序以连接到两个数据库?
目前没有一种好的方法可以配置一个 Ruby 进程同时使用两个会话。如果您使用 Rails,您可以通过设置 NEO4J_URL 环境变量来更改服务器。否则,您需要通过设置 Neo4j::ActiveBase.current_session 或 Neo4j::ActiveBase.on_establish_session 来管理会话(这将为每个新线程设置会话,如果你是 运行 一个 multi-threaded 进程)
参见: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
中的内容。 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'