Add support for REDIS_URL environment variables.

This commit is contained in:
Robin van der Vleuten 2016-12-13 12:21:30 +01:00 committed by Fabien Potencier
parent 1e1a01804e
commit 4e6086f7db
5 changed files with 63 additions and 1 deletions

View File

@ -96,7 +96,9 @@ class CachePoolPass implements CompilerPassInterface
*/
public static function getServiceProvider(ContainerBuilder $container, $name)
{
if (0 === strpos($name, 'redis://')) {
$container->resolveEnvPlaceholders($name, null, $usedEnvs);
if (0 === strpos($name, 'redis://') || $usedEnvs) {
$dsn = $name;
if (!$container->hasDefinition($name = md5($dsn))) {

View File

@ -0,0 +1,9 @@
<?php
$container->setParameter('env(REDIS_URL)', 'redis://paas.com');
$container->loadFromExtension('framework', array(
'cache' => array(
'default_redis_provider' => '%env(REDIS_URL)%',
),
));

View File

@ -0,0 +1,17 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<parameters>
<parameter key="env(REDIS_URL)">redis://paas.com</parameter>
</parameters>
<framework:config>
<framework:cache>
<framework:default-redis-provider>%env(REDIS_URL)%</framework:default-redis-provider>
</framework:cache>
</framework:config>
</container>

View File

@ -0,0 +1,6 @@
parameters:
env(REDIS_URL): redis://paas.com
framework:
cache:
default_redis_provider: "%env(REDIS_URL)%"

View File

@ -697,6 +697,34 @@ abstract class FrameworkExtensionTest extends TestCase
$this->assertTrue($container->has('property_info'));
}
public function testCacheDefaultRedisProvider()
{
$container = $this->createContainerFromFile('cache');
$redisUrl = 'redis://localhost';
$providerId = md5($redisUrl);
$this->assertTrue($container->hasDefinition($providerId));
$url = $container->getDefinition($providerId)->getArgument(0);
$this->assertSame($redisUrl, $url);
}
public function testCacheDefaultRedisProviderWithEnvVar()
{
$container = $this->createContainerFromFile('cache_env_var');
$redisUrl = 'redis://paas.com';
$providerId = md5($redisUrl);
$this->assertTrue($container->hasDefinition($providerId));
$url = $container->getDefinition($providerId)->getArgument(0);
$this->assertSame($redisUrl, $url);
}
public function testCachePoolServices()
{
$container = $this->createContainerFromFile('cache');