У меня есть две базы данных neo4j, работающие на двух разных хостах. Я подключил приложение rails к одному из них при создании приложения. Теперь я хочу использовать другую базу данных вместе с приложением. Как настроить приложение для подключения к базам данных?Используйте две базы 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
Как Брайан упоминалось в настоящее время мы не можем настроить один процесс Ruby, чтобы использовать две сессии одновременно. Мы должны управлять сессии, установив Neo4j::ActiveBase.current_session
(См: https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/active_base.rb)
neo4j.yml
устанавливает Neo4j::ActiveBase.current_session
для вас в railtie. Если вы установили Neo4j::ActiveBase.current_session
после того, как приложение запустилось, оно переопределит то, что было в neo4j.yml
. current_session
должен быть объектом Neo4j::Core::CypherSession
от драгоценного камня neo4j. (См. Readme: 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'