首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SncRedisBundle (predis) - heroku :如何配置DSN

SncRedisBundle (predis) - heroku :如何配置DSN
EN

Stack Overflow用户
提问于 2017-01-11 09:57:47
回答 1查看 670关注 0票数 2

我在本地使用成功的SncRedisBundle,但不能让它使用heroku。这是我的配置:

代码语言:javascript
复制
#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
代码语言:javascript
复制
#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,因此,它似乎与普雷迪斯博士非常兼容,但是composer构造失败了

远程: Predis\Response\ServerException remote: 需要NOAUTH身份验证。

我找不到我做错了什么

EN

回答 1

Stack Overflow用户

发布于 2017-01-11 11:03:31

问题解决了:最初我使用了这种语法:dsn: "%redis_url%/3"与heroku不兼容。当我将其更改为可接受的格式:"%redis_url%?database=3"时,我在其他地方添加了bug,下面是heroku/parameters_heroku.php中的简单更正

代码语言:javascript
复制
if ($redisUrl = getenv('REDIS_URL')) {
    $container->setParameter('redis_url', $redisUrl);
}

互联网上的一些资源会说predis与heroku的格式不兼容,但它们是旧的&错的;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41587686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档