首页 文章

AWS ElasticBeanstalk ENV Vars无法正常工作

提问于
浏览
9

我'm hosting my PHP project on AWS EC2 servers, using Elastic Beanstalk. I'已经使用 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 回答

  • 5

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

    phpdotenv适用于开发环境,通常不应用于 生产环境 环境 . 在 生产环境 中,应该设置实际的环境变量,以便在每个请求上加载.env文件没有开销 . 这可以通过使用Vagrant,chef或Puppet等工具的自动部署流程来实现,也可以通过Pagodabox和Heroku等 Cloud 主机手动设置 .

    如果你没有.env文件,你将有php致命错误

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

    如果您希望下面是您可以设置 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();
    }
    

相关问题