SncRedisBundle (предис) - геройку: как настроить DSN
Я использую SncRedisBundle с успехом локально, но не могу заставить его работать, используя heroku. Вот мой конфиг:
#config.yml
imports:
- { resource: heroku/parameters_heroku.php } #heroku cloud provider configuration's
snc_redis:
clients:
default:
type: predis
alias: default
dsn: "%redis_url%"
cache:
type: predis
alias: cache
dsn: "%redis_url%&database=1"
logging: false
session:
type: predis
alias: session
dsn: "%redis_url%&database=2"
task:
type: predis
alias: task
dsn: "%redis_url%&database=3"
doctrine:
type: predis
alias: doctrine
dsn: "%redis_url%&database=4"
session:
client: session
ttl: 10800 #le session expirera apres 3 heures
doctrine:
metadata_cache:
client: doctrine
entity_manager: default # the name of your entity_manager connection
document_manager: default # the name of your document_manager connection
result_cache:
client: doctrine
entity_manager: [default] # you may specify multiple entity_managers
query_cache:
client: doctrine
entity_manager: default
second_level_cache:
client: doctrine
entity_manager: default
monolog:
client: cache
key: monolog
swiftmailer:
client: default
key: swiftmailer
#heroku/parameters_heroku.php
<?php
$is_heroku = getenv("IS_HEROKU");//manually added : heroku config:set IS_HEROKU=1
if (!$is_heroku) {
return;
}
if ($redisUrl = getenv('REDIS_URL')) {
$aParsedRedisUrl = parse_url($redisUrl);
$redisConstructedDsn = 'redis://'.$aParsedRedisUrl['host'].':'.$aParsedRedisUrl['port'].$aParsedRedisUrl['path'].'?'.'password='.$aParsedRedisUrl['pass'].($aParsedRedisUrl['query'] ? '&'.$aParsedRedisUrl['query'] : ''); // le user ne sert pas : .'&user='.$aParsedRedisUrl['user']
$container->setParameter('redis_url', $redisConstructedDsn);
}
если я дам $redisConstructedDsn
в процессе сборки герою у меня получается что-то вроде этого: redis://xxxxxx.compute-1.amazonaws.com:18839?password=foobar
так что это выглядит довольно совместимым с predis doc, но компоновщик не работает с
удаленный: [Predis\Response\ServerException] удаленный:
NOAUTH Требуется аутентификация.
Я не могу найти то, что я сделал не так
1 ответ
Проблема решена: изначально я использовал такой синтаксис: dsn: "%redis_url%/3"
который несовместим с герокой. Когда я изменил его в приемлемый формат: "%redis_url%?database=3"
Я добавил ошибку в другом месте, так что вот простая поправка в heroku/parameters_heroku.php
if ($redisUrl = getenv('REDIS_URL')) {
$container->setParameter('redis_url', $redisUrl);
}
некоторые ресурсы в интернете скажут, что predis не совместим с форматом heroku, но они старые и неправильные;)