2017-01-11 54 views
2

我在本地成功使用SncRedisBundle,但無法使用heroku工作。 這裏是我的配置: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); 
} 

,如果我在Heroku的構建過程中傾倒$redisConstructedDsn,我有類似的東西:redis://xxxxxx.compute-1.amazonaws.com:18839?password=foobar,因此,它似乎與predis doc漂亮兼容 但作曲家建設失敗,一個

遠程:[Predis \ Response \ ServerException]遠程:
NOAUTH需要身份驗證。

我無法找到我做了什麼錯解決

回答

0

問題: 最初我用這種語法:dsn: "%redis_url%/3"至極與Heroku的不兼容。 當我把它改成一個可以接受的格式:"%redis_url%?database=3",我加的bug其他地方,所以這裏是heroku/parameters_heroku.php

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

簡單的校正在互聯網上的一些資源會說,predis不與Heroku的格式兼容,但他們是舊的&錯了;)