php - SncRedisBundle (predis)-heroku : how to configure the DSN

标签 php symfony heroku redis predis

我在本地成功使用 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);
}

如果我在 heroku 构建过程中转储 $redisConstructedDsn,我会得到类似的东西:redis://xxxxxx.compute-1.amazonaws.com:18839?password= foob​​ar,因此,它似乎与 predis doc 非常兼容 但是 Composer 构造失败了

remote: [Predis\Response\ServerException] remote:
NOAUTH Authentication required.

我找不到我做错了什么

最佳答案

问题解决了: 最初我使用了这种语法: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 的格式不兼容,但它们是旧的&错误的;)

关于php - SncRedisBundle (predis)-heroku : how to configure the DSN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41587686/

相关文章:

php - Laravel 多个可选参数不起作用

php - Pimple DI 共享已弃用。怎么办?

php - Wincache 扩展无法在 IIS 上正常工作(它仍然很慢|

php - 如何解决 PHP 中缺少 finally block 的问题?

javascript - 如果未传递单元格值,则隐藏表格行

php - 交响乐/独白 : Custom processor with FOSUserBundle data

postgresql - 使用 JPA 进行 Sprint 引导 - 创建 bean 名称时出错 'entityManagerFactory' - driverClassName 需要 jdbcUrl

javascript - 在 Heroku 上访问 Javascript 中的环境变量?

ruby - 处理 Dalli::RingError - Sinatra 中没有可用的服务器

php - 没有谷歌电子表格的谷歌图表