2017-01-11 6 views
2

저는 성공적으로 SncRedisBundle을 사용하고 있지만 heroku를 사용하여 작동시킬 수는 없습니다. 나는 Heroku가 빌드 과정에서 $redisConstructedDsn 덤프 경우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); 
} 

, 나는 그런 일이있어 : 여기 내 설정이다 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", 그래서 여기에 인터넷에 일부 리소스가 predis이에게 Heroku의 형식과 호환되지 않습니다 말할 것이다 heroku/parameters_heroku.php

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

의 간단한 보정이지만, 다른 곳에서 버그를 추가 그들은 오래되었습니다 & 잘못되었습니다;)