2016-10-10 206 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