2016-10-10 208 views
0

我一直在努力获得Symfony 2.4应用程序中必需的env变量。这个想法是将应用程序放在一个将由Amazon ECS管理的Docker容器中。在Symfony 2.4中获取环境变量

我曾尝试以下:

1 - 导出一个变量:

database_host : '%database.host%' 

没有:

export SYMFONY__DATABASE__HOST=blabla 

然后parameters.yml.dist,用得到它工作。在作曲家安装之后,创建parameter.yml的参数,类似parameters.yml.dist。这些值没有被转换为env变量中的任何值。

我看到了某处我需要禁用香包。也没有帮助。

2 - 添加变量composer.json使用incenteev的 “env_map”

"env-map": { 
"database_host": "DB_HOSTNAME" 
} 

DB_HOSTNAME是,我以同样的方式

export DB_HOSTNAME=balbla.com 

出口当我键入php -i | grep DB的环境变量,我看到这些变量。

然后,当I型composer install --no-interaction,在第一种情况下我得到这个错误消息:You have requested a non-existent parameter "database.host". 在第二种情况下,parameters.yml与任何值在parameters.yml.dist创建,并且将env变量I加至composer.json不会在任何地方使用。

https://github.com/symfony/symfony/issues/7555http://symfony.com/doc/current/configuration/external_parameters.html 并没有太大帮助。

任何想法家伙?我真的希望以最简洁的方式获得这些env变量。

+0

我删除了我的答案,因为它实际上并没有解决您的问题。 “张嘴,插脚”。 –

回答

1

我曾遇到同样的麻烦。我找到了一个像Platform.sh一样的方法来托管他们的Symfony应用程序。它的问世在Github上:

https://github.com/platformsh/platformsh-example-symfony

因此,基本上,你创建一个parameters_prod.php配置文件至极你config.yml进口。在内部,您测试是否SYMOFNY_ENV = prod(无论如何,您需要在生产环境中部署时设置)。如果设置了这个变量,你会得到parameters_prod.php中的内容,否则你会得到parameters.yml中的内容(对于开发环境)。

为了让你在parameters_prod.php中的环境变量,你使用getenv()PHP方法。

所以基本上,你的parameters_prod。PHP将是这个样子:

<?php 
if (getenv('SYMFONY_ENV') == 'prod') { 
    $container->setParameter('database_driver', 'pdo_mysql'); 
    $container->setParameter('database_port',  3306); 
    $container->setParameter('database_host',  getenv('DATABASE_HOST')); 
    $container->setParameter('database_name',  getenv('DATABASE_NAME')); 
    $container->setParameter('database_user',  getenv('DATABASE_USER')); 
    $container->setParameter('database_password', getenv('DATABASE_PASSWORD')); 
} 

泊坞窗就能如果您在前台模式下启动Apache作为容器的入口点(你应该反正让这些环境变量没有别的任何事情,否则容器不会活着)

+0

我只是试过了,它的工作。谢谢。 – Bowman