AWS ElasticBeanstalk ENV Vars无法正常工作

时间:2015-06-17 23:54:24

标签: php amazon-web-services amazon-ec2 elastic-beanstalk

我使用Elastic Beanstalk在AWS EC2服务器上托管我的PHP项目。我使用php dotenv设置了我的ENV Vars,这似乎可以从我的根.env文件中获得我的vars:

DbConnect.php:

require '../vendor/autoload.php';
$dotenv = new Dotenv($_SERVER['DOCUMENT_ROOT']);
$dotenv->load();

$DB_HOST = getenv('DB_HOST');
$DB_USERNAME = getenv('DB_USERNAME');
$DB_PASSWORD = getenv('DB_PASSWORD');
$DB_DATABASE = getenv('DB_DATABASE');

$mysqli = new mysqli($DB_HOST, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE);

因此,在AWS管理控制台中,我在软件配置,git推送和重新部署中设置了相同的名称ENV vars。我得到500错误,因为EC2 ENV变速器似乎没有发现。

enter image description here

我还需要做些什么吗?

更新

eb printenv显示了正确的env var值。

1 个答案:

答案 0 :(得分:5)

来自https://github.com/vlucas/phpdotenv

  

phpdotenv是针对开发环境而制定的,通常应该   不能用于生产。在生产中,实际环境   应该设置变量,以便没有加载的开销   每个请求都有.env文件。这可以通过自动化实现   使用Vagrant,chef或Puppet等工具进行部署过程,或者可以   使用Pagodabox和Heroku等云主机手动设置。

如果您没有.env文件,则会出现php致命错误

  

致命错误:未捕获的异常   ' Dotenv \异常\ InvalidPathException'有消息'无法阅读   /home/vagrant/Code/project/.env.'中的环境文件;在   /home/vagrant/Code/project/vendor/vlucas/phpdotenv/src/Loader.php on   第75行

如果你愿意的话 以下是您可以设置Environment Variable进行检查的示例代码,如果它位于本地/测试环境中,则仅加载 Dotenv

if(getenv('APP_ENV') === 'local' || getenv('APP_ENV') === 'testing')
{
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
}

或者另一种方法是检查.env文件是否存在

$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env';
if(is_file($filePath) && is_readable($filePath))
{
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
}