在Symfony 2.4

时间:2016-10-10 21:45:48

标签: php symfony composer-php environment-variables

我一直在努力在Symfony 2.4应用程序中获取必要的env变量。我们的想法是将应用程序放在将由Amazon ECS管理的docker容器中。

我尝试了以下内容:

1 - 使用以下内容导出变量:

export SYMFONY__DATABASE__HOST=blabla

然后在parameters.yml.dist中,得到它:

database_host : '%database.host%'

没有工作。在composer安装之后,创建en parameter.yml,看起来像parameters.yml.dist。这些值尚未转换为env变量中的任何值。

我在某个地方看到我需要禁用该版本。也没帮助。

2 - 使用salaryteev" env_map"

在composer.json中添加变量
"env-map": {
"database_host": "DB_HOSTNAME"
}

DB_HOSTNAME是我以相同方式导出的env变量

export DB_HOSTNAME=balbla.com

当我输入php -i | grep DB时,我确实看到了这些变量。

然后当我输入composer install --no-interaction时,在第一种情况下,我收到此错误消息:You have requested a non-existent parameter "database.host". 在第二种情况下,参数.yml是使用parameters.yml.dist中的任何值创建的,并且我添加到composer.json的env变量不会在任何地方使用。

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

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

1 个答案:

答案 0 :(得分:3)

我遇到过同样的麻烦。我找到了一种方法来解决它像Platform.sh那样托管他们的Symfony应用程序。它可以在Github上找到:

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

基本上,你创建一个你在config.yml中导入的parameters_prod.php配置文件。在内部,您将测试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作为容器的入口点(无论如何你应该这样,否则容器将不会活着),Docker将能够获得这些环境变量,而无需做任何事情。