Joh*_*ean 5 php environment-variables amazon-web-services laravel amazon-elastic-beanstalk
我正在尝试在开发模式下将我的Laravel应用程序部署到Elastic Beanstalk.为了使应用程序在开发模式而不是生产中运行,我在我的/bootstrap/start.php文件中完成了以下操作:
$env = $app->detectEnvironment(function() {
return $_ENV['ENV_NAME'];
});
Run Code Online (Sandbox Code Playgroud)
为了实际创建环境变量,我.config在以下路径中创建了一个文件:/.ebextensions/00environmentVariables.config包含以下内容:
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: ENV_NAME
value: development
- option_name: DB_HOST
value: [redacted]
- option_name: DB_PORT
value: [redacted]
- option_name: DB_NAME
value: [redacted]
- option_name: DB_USER
value: [redacted]
- option_name: DB_PASS
value: [redacted]
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行时eb start,它会旋转一个EC2实例并尝试配置它,此时它会告诉我它失败了.并检查日志.在日志中,我可以看到这些条目:
PHP注意:未定义的索引:第28行的/var/app/ondeck/bootstrap/start.php中的ENV_NAME
注意:未定义的索引:第28行的/var/app/ondeck/bootstrap/start.php中的ENV_NAME
所以由于某种原因,ENV_NAME环境变量不存在,即使我已经指定了它00environmentVariables.config.甚至更奇怪的是,我可以看到环境变量确实存在于EB环境的软件配置设置下:

总结一下:
ENV_NAMEeixstsENV_NAME在.config此环境的文件和Elastic Beanstalk设置中都可以使用它们好吧,所以我发现在通过Apache HTTP服务器提供应用程序时环境变量可以正常工作,但运行PHP CLI时环境变量不存在.
在上面的日志中,它抱怨ENV_NAME运行时不存在/usr/bin/composer.phar install.
因此,出于某种原因,我的环境变量在PHP CLI中不存在,但在通过Apache提供时它们可以正常工作.
所以我通过SSH连接到在Elastic Beanstalk上托管我的Laravel应用程序的EC2实例,当我使用``printenv命令'时,我可以看到正确的环境变量:
ENV_NAME=development
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行die(var_dump($_SERVER));并运行PHP CLI,我看不到我定义的环境变量.与$_ENV和相同的故事getenv().
为什么我不能在PHP CLI中访问我的环境变量,当我在Apache处理我的PHP脚本时可以访问它们?
我用test.php一行写了一个文件:die(var_dump($_ENV));.
当我运行这个时,php test.php我成功地获得了我的自定义环境变量,所以这似乎只是一个作曲家问题,而不是PHP CLI问题.
我使用 YAML 脚本,该脚本根据为 ec2-user 设置的现有变量为 root 用户设置环境变量。将其添加到.ebextensions带有.config扩展名的文件夹中。
从那里你可以运行 PHP cli,它将看到正确的环境变量
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/job_after_deploy.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
source /opt/elasticbeanstalk/support/envvars
# Run PHP scripts here. #
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3165 次 |
| 最近记录: |