2017-01-11 3 views
2

Я использую SncRedisBundle с успехом локально, но не могу работать с помощью герою. Вот мой конфиг:SncRedisBundle (predis) - heroku: как настроить DSN

#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 в процессе сборки Heroku, у меня есть что-то вроде этого: redis://xxxxxx.compute-1.amazonaws.com:18839?password=foobar, поэтому он кажется довольно совместим с predis doc , но конструкция композитора выходит из строя с использованием

remote: [Predis \ Response \ ServerException] remote:
NOAUTH Требуется аутентификация.

Я не могу найти то, что я сделал неправильно

ответ

0

проблема решена: первоначально я использовал этот вид синтаксиса: dsn: "%redis_url%/3" которым несовместима с Heroku. Когда я изменил ее до приемлемого формата: "%redis_url%?database=3", я добавил ошибку в другом месте, так что здесь простая коррекция heroku/parameters_heroku.php

if ($redisUrl = getenv('REDIS_URL')) { 
    $container->setParameter('redis_url', $redisUrl); 
} 

некоторые ресурсы в Интернете, будут говорить, что predis не совместим с форматом Heroku, но они старые & не являются должными);

Смежные вопросы