SQLSTATE [HY000] [2002]在Elastic Beanstalk / Laravel上执行命令时没有这样的文件或目录

时间:2016-05-03 20:55:04

标签: laravel elastic-beanstalk env

我在Laravel 5.1 / AWS Elastic Beanstalk中有一个生产应用程序。

由于我有几个环境和自动部署,我不使用.env,但是我定义了我的环境变量directly on server

当代码部署到Elastic beanstalk时,我无法执行任何命令,因为环境变量未得到解析。

所以,当我执行:

 php artisan migrate

我明白了:

[PDOException]                                    
SQLSTATE[HY000] [2002] No such file or directory

在这个post中,用户遇到了与我完全相同的问题,但是他解决了这个问题,制作了一个包含所有环境变量的.environment。我不太喜欢它。

然后,如果我把它放在.gitignore中,持续部署将永远不会部署它。

我不知道该怎么做,也不想在我的git中包含我的数据库连接设置......

2 个答案:

答案 0 :(得分:0)

我遇到了这个问题,并通过在Elastic Beanstalk中的DB_HOST environment变量的末尾添加端口来解决。如果有人遇到此问题并且不使用EB env var,请尝试将端口添加到.env。

答案 1 :(得分:-2)

出现此消息的原因是因为PHP正在寻找MySQL套接字文件,并且MySQL未安装在服务器上,您需要使用RDS,或者在EC2或其他地方托管的MySQL实例。

要配置数据库,您可以使用AWS EB命令行工具,如下所示:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html

e.g。 eb setenv DATABASE=laravel PASSWORD=123

或者您可以使用Web控制台配置它们:

http://docs.aws.amazon.com/gettingstarted/latest/deploy/envvar.html

保存这些内容会导致应用程序更新,所以一次完成所有这些操作,因为在部署更改时您将无法编辑任何内容。

其他选项包括:

将凭据存储在源代码管理中

将它们存储在Elastic Beanstalk界面中,该界面将它们推入环境变量

将它们存储在S3上的文件中,您锁定该文件只能由Elastic Beanstalk实例访问,并在.ebextensions配置文件中添加内容

如果您能澄清其中任何一项不正确的原因,可能有助于找到正确的解决方案。