我在Laravel 5.1/AWS Elastic Beanstalk中有一个生产应用程序。
由于我有几个环境和自动部署,我不使用.env,但我直接在服务器上定义我的环境变量:
当代码被部署到Elastic beanstall时,我不能执行任何命令,因为环境变量没有被解析。
所以,当我执行:
php artisan migrate
我得到:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
在这篇文章中,用户遇到了和我完全相同的问题,但他解决了这个问题,创建了一个.environment,其中包含他所有环境的vars。我不太喜欢它。
然后,如果我把它放在.gitignore中,连续部署将永远不会部署它。
我不知道该怎么办,也不想在我的git中包含我的数据库连接设置。。。
我遇到了这个问题,并通过在Elastic Beanstalk中的DB_HOST
环境变量末尾添加端口来解决它。如果有人遇到此问题并且不使用EB env vars,请尝试将端口添加到.env.
出现此消息的原因是,PHP正在寻找MySQL套接字文件,而服务器上没有安装MySQL,因此您需要使用RDS或EC2上托管的MySQL实例,或其他地方。
要配置数据库,您可以使用AWS EB命令行工具,如本文所述:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html
例如eb setenv DATABASE=laravel PASSWORD=123
或者您可以使用web控制台配置它们:
http://docs.aws.amazon.com/gettingstarted/latest/deploy/envvar.html
保存这些会导致应用程序更新,所以一次执行所有操作,因为在部署更改时您将无法编辑任何内容。
其他选项包括:
在源代码管理中存储凭据
将它们存储在Elastic Beanstalk接口中,该接口将它们推送到环境变量中
将它们存储在S3上的一个文件中,您将其锁定为只能由您的Elastic Beanstalk实例访问,并向.eextensions配置文件中添加一些内容
如果你能澄清为什么这些都不正确,这可能有助于找到正确的解决方案。