У меня проблема с настройкой MongoDB в Symfony2.
Технические характеристики:
"Symfony": "2.6.*""doctrine/mongodb-odm": "1.0.*@dev",
"doctrine/mongodb-odm-bundle": "3.0.*@dev"
У меня есть 2 базы данных, используемые в 2 разных комплектах, nxtlog и nxtsurvey, в MongoDB.
Первоначальная проблема, с которой я столкнулся, заключалась в том, что имя базы данных, добавленное в опциях, не было учтено, что привело к использованию базы данных «по умолчанию», которая, конечно, не существует. Я также не хочу добавлять default_connection и default_manager или даже default_database, так как оба соединения используются в неосновных комплектах.
==== Попытка # 1 ====
Вот оригинальный конфиг, который у меня был:
doctrine_mongodb:
connections:
nxtlog:
server: "%nxtlog_database_server%"options:
username: "%nxtlog_database_username%"password: "%nxtlog_database_password%"db: "%nxtlog_database_name%"nxtsurvey:
server: "%nxtsurvey_database_server%"options:
username: "%nxtsurvey_database_username%"password: "%nxtsurvey_database_password%"db: "%nxtsurvey_database_name%"document_managers:
nxtlog:
mappings:
NxtLogBundle: ~
nxtsurvey:
mappings:
NxtVibeSurveyBundle: ~
Чтобы это работало, я добавил имя БД в каждой аннотации к документу:
/**
* @MongoDB\Document(db="nxtlog")
*/
class ErrorLogs
Это временное решение, но так как я планирую повторно использовать пакеты в других моих проектах, я не хочу просматривать все документы и устанавливать имя базы данных.
==== Попытка # 2 ====
Моя вторая попытка была неукоснительно следовать документации, и поэтому я попробовал следующее:
doctrine_mongodb:
connections:
nxtlog_conn:
server: "%nxtlog_database_server%"options:
username: "%nxtlog_database_username%"password: "%nxtlog_database_password%"connect: true
db: "%nxtlog_database_name%"nxtsurvey_conn:
server: "%nxtsurvey_database_server%"options:
username: "%nxtsurvey_database_username%"password: "%nxtsurvey_database_password%"connect: true
db: "%nxtsurvey_database_name%"document_managers:
nxtlog_dm:
connection: nxtlog_conn
mappings:
NxtLogBundle: ~
nxtsurvey_dm:
connection: nxtsurvey_conn
mappings:
NxtVibeSurveyBundle: ~
И получите следующую ошибку:
ServiceNotFoundException in CheckExceptionOnInvalidReferenceBehaviorPass.php line 58:
The service "doctrine_mongodb.odm.nxtlog_conn_connection" has a dependency on a non-existent service "doctrine_mongodb.odm.nxtlog_conn_configuration".
Поэтому я понял, что у меня не может быть разных имен для соединений и менеджеров данных. В это я не поверил, так что я его погуглил, и у кого-то возникла похожая проблема, и ответом было добавить следующее в doctrine_mongodb:
default_commit_options: ~
Но это решение не сработало для меня, и после большего количества поисков я обнаружил, что jmikola, парень, который написал пакет (или его части), допустил ошибку, сказал, что исправил ее, и что default_commit_options не должен быть необходимая опция конфигурации. (См. https://github.com/doctrine/DoctrineMongoDBBundle/issues/222)
На данный момент мне нужна помощь, потому что это занимает слишком много времени, чтобы решить.
Спасибо
Некоторое время назад я тоже пытался настроить несколько соединений Doctrine, хотя в то время я использовал Zend Framework (и соответствующие модули Doctrine). Если я правильно помню, вам нужно настроить все Сервисы Doctrine с добавленным новым пространством имен (в вашем случае nxtlog_conn
).
Я проверил источник ZF2 DoctrineMongoODMModule и я до сих пор помню это: если вы хотите иметь связь, вам нужна доктрина configuration service
с префиксом того же пространства имен.
Судя по вашему сообщению об ошибке, это также относится к пакету Symfony, хотя я не смог найти ответственное местоположение в исходном коде пакета.
Сервис
"doctrine_mongodb.odm.nxtlog_conn_connection"
зависит от несуществующего сервиса"doctrine_mongodb.odm.nxtlog_conn_configuration"
,
Это в основном говорит вам: я хочу соединение, но подождите секунду, я не могу найти соответствующую конфигурацию!
Попытайтесь найти, как конфигурация настроена для orm_default
подключение и настройте свою конфигурацию, как мудрый. Если вы столкнулись с другой ошибкой того же формата, найдите следующее требуемое имя службы, а затем промойте и повторите.
Хум, не уверен, но надеюсь, что это поможет. Здесь ссылка из группы Google
https://groups.google.com/d/msg/doctrine-user/6YCVAZ4h4nA/YrZNfSopmNUJ
doctrine_mongodb:
default_database: "%nxtlog_database_name%"default_connection: nxtlog_conn
default_document_manager: nxtlog_conn
connections:
nxtlog_conn:
server: "%nxtlog_database_server%"options:
username: "%nxtlog_database_username%"password: "%nxtlog_database_password%"connect: true
db: "%nxtlog_database_name%"nxtsurvey_conn:
server: "%nxtsurvey_database_server%"options:
username: "%nxtsurvey_database_username%"password: "%nxtsurvey_database_password%"connect: true
db: "%nxtsurvey_database_name%"document_managers:
nxtlog_conn:
connection: nxtlog_conn
mappings:
NxtLogBundle: ~
nxtsurvey_conn:
connection: nxtsurvey_conn
mappings:
NxtVibeSurveyBundle: ~