【发布时间】:2017-11-02 13:26:36
【问题描述】:
我已经在 Heroku 中托管了我的应用程序 (Symfony 2.8)。我有一个 mongoDB 插件来存储会话,它工作正常,但是当我尝试添加副本服务器时,我遇到了一些问题。 mongodb 插件默认提供副本。我是说
我来说明一下我的环境和配置:
环境
我想使用这个网址(这是 Heroku 中的 mongodb 插件提供给我的)
MONGOLAB_URI = "mongodb://heroku_user:heroku_password@ds245975-a0.mlab.com:45975,ds245975-a1.mlab.com:45975/heroku_3b4l8zhl?replicaSet=rs-ds245975"
如果我使用这个是有效的:
MONGOLAB_URI = mongodb://heroku_user:heroku_password@ds245975-a0.mlab.com:45975/heroku_3b4l8zhl
会议
在 parameters.php 我得到这个信息:
$mongoLabUri = getenv('MONGOLAB_URI');
$mongoLabUri = getenv('MONGOLAB_URI');
if (false !== $mongoLabUri) {
$matches = [];
preg_match(
'#mongodb://(?P<user>.*?):(?P<password>.*?)@(?P<server>.*)/(?P<database>[^?]*)#',
$mongoLabUri,
$matches
);
$container->setParameter('mongo_server', 'mongodb://'.$matches['user'].':'.$matches['password'].'@'.$matches['server']."/".$matches['database']);
$container->setParameter('mongo_database', $matches['database']);
}
在配置文件中,我将会话处理程序配置为使用以下参数:
config.yml
doctrine_mongodb:
connections:
default:
server: %mongo_server%
options: {}
default_database: %mongo_database%
document_managers:
default:
auto_mapping: true
services:
session.handler.mongo:
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler
arguments: [@mongo, %mongo.session.options%]
mongo.connection:
class: MongoDoctrine\MongoDB\Connection
factory_service: doctrine.odm.mongodb.document_manager
factory_method: getConnection
calls:
- [initialize, []]
mongo:
class: Mongo
factory_service: mongo.connection
factory_method: getMongo
parameters:
mongo.session.options:
database: %mongo_database%
collection: session
我尝试过的事情
- 使用 ?replicaSet=rs-ds245975 配置了 mongo_server
- 删除 ?replicaSet=rs-ds245975
- 我从 mongo 控制台连接到两台服务器,它可以正常工作。
-
修改symfony配置:
-https://symfony.com/doc/current/doctrine/mongodb_session_storage.html
-https://symfony.com/doc/master/bundles/DoctrineMongoDBBundle/config.html
一切正常。当我尝试设置副本时,我遇到了不同的问题。好像有什么误解,我现在看不到。
欢迎任何帮助/提示。
【问题讨论】: