AWS弹性Beanstalk - 在环境属性中设置Laravel的.env

3

根据我的理解,AWS Elastic Beanstalk有自己的环境属性,位于软件配置面板,点击齿轮图标即可查看。在我的Laravel的.env文件中,我有一些信息,比如上传图片的S3存储桶、邮件服务等等。这是否意味着我需要将每个键值对从Laravel的.env文件添加到AWS Elastic Beanstalk的环境属性中?


你在提交 .env 文件到你的 git 仓库吗?需要知道这个信息以便我能帮助你。 - Amin Ahmed Khan
不,出于安全原因,我不会提交它。 - Alphonse
所以我认为您可能需要在软件配置面板中创建所有环境变量,https://dillieodigital.wordpress.com/2015/05/29/laravel-5-configurations-in-aws-elastic-beanstalk/ - Amin Ahmed Khan
1个回答

6

简短回答是是的

如果您在软件配置中添加环境变量,特别是如果您没有将.env文件上传到服务器,则必须在代码中引用这些变量。

例如,以下是如何在服务器上引用Elastic Beanstalk中的此配置并在本地使用.env文件:

在config/app.php中:

<?php

return [
    ...
    'env' => array_key_exists('APP_ENV', $_SERVER) ? $_SERVER['APP_ENV'] : env('APP_ENV'),
    'debug' => array_key_exists('APP_DEBUG', $_SERVER) && $_SERVER['APP_DEBUG'] === 'false' ? false : env('APP_DEBUG'),

    ...

请注意,我这里正在做两件事情。
1. 对于 APP_ENV,由于我希望在服务器上使用'production',但在本地使用'dev',因此如果可用(即仅在生产服务器上),我想使用 $_SERVER['APP_ENV'],否则在本地使用我在 .env 文件中定义的 APP_ENV。请注意,在 Elastic Beanstalk 上,您只需将变量命名为 APP_ENV。
2. 这有点棘手。您在 Elastic Beanstalk 中设置的任何变量都会变成字符串。因此,当在生产环境中时,您肯定希望将 APP_DEBUG 设置为 false。但是,这会变成字符串"false",如果您测试它 "false" == true。因此,这将在服务器上返回 true。为了解决这个问题,我使用上面的代码来测试是否将 APP_DEBUG 设置为 'false',如果是,则将其设置为布尔值 false。
现在,这只是 config/app 文件中的两个示例。对于您而言,在它们各自的配置文件中设置 S3 存储桶和邮件服务器时,您也需要做同样的操作。
我知道我回复很晚,但我希望这可以帮助其他人! :)

这个应用程序可以在控制台中运行吗? - mssb
@mssb,如果你想在本地运行它,那么是的。请注意,三元运算符中的问题是查看 $_SERVER 中是否存在特定的键,如果不存在,则会从点env文件中获取信息,这将是在本地工作的情况。 - Brad Ahrens
AWS EBS 会将环境属性保存在 $_SERVER 中,而 Laravel 使用 Vance Lucas 开发的 DotEnv PHP 库,该库可以自动从 .env 文件中加载环境变量到 getenv()$_ENV$_SERVER。这意味着您可以直接使用 env() 函数,而不需要使用 array_key_exists() 函数。 - Antonio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接