我一直在努力在Symfony 2.4应用程序中获得必要的环境变量。这个想法是将应用程序放在一个由Amazon ECS管理的docker容器中。
我已经试过了:
1 -导出变量:
export SYMFONY__DATABASE__HOST=blabla
then in parameters.yml。Dist,使用:
database_host : '%database.host%'
不工作。编译器安装后,en参数。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
时,我确实看到了这些变量。
然后,当我输入composer install --no-interaction
时,在第一种情况下,我得到这个错误消息:You have requested a non-existent parameter "database.host".
在第二种情况下,参数。Yml是用parameters.yml中的任何值创建的。以及我添加到composer中的env变量。Json没有在任何地方使用。
https://github.com/symfony/symfony/issues/7555和http://symfony.com/doc/current/configuration/external_parameters.html没有多大帮助。
有什么想法吗?我真的很想以最干净的方式获得这些环境变量
我曾经遇到过同样的麻烦。我找到了一种方法来绕过它,就像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作为容器的入口点,Docker将能够获得这些环境变量,而不需要做任何其他事情(无论如何你都应该这样做,否则容器将无法保持活跃)