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, но они старые и неправильные;)

Другие вопросы по тегам