Laravel 7- AWS - 运行“php artisan migrate”时出现 Elastic Beanstalk + RDS 错误

Posted

技术标签:

【中文标题】Laravel 7- AWS - 运行“php artisan migrate”时出现 Elastic Beanstalk + RDS 错误【英文标题】:Laravel 7- AWS - Elastic Beanstalk + RDS Error when running "php artisan migrate" 【发布时间】:2020-08-24 14:44:31 【问题描述】:

我正在尝试在 AWS 上的 Elastic Beanstalk 中运行 Laravel 应用程序。 我在 AWS Elastic Beanstalk 上使用 Laravel 版本 7 和 php 7.4。 每次我尝试运行 "php artisan migrate" 时都会收到此错误: 我的数据库 RDS 凭据都正确。

照亮\数据库\查询异常

SQLSTATE[HY000] [2002] 连接被拒绝(SQL: select * from information_sche ma.tables 在哪里 table_schema = forge 和 table_name = 迁移和 table_type = '基表')

在 供应商/laravel/framework/src/Illuminate/Database/Connection.php:671 667| // 如果尝试运行查询时发生异常,我们将格式化错误 668| // 包含与 SQL 的绑定的消息,这将使异常 a 669| // 对开发人员更有帮助,而不仅仅是数据库的错误。 670|捕获(异常 $e) 671|抛出新的查询异常( 672| $query, $this->prepareBindings($bindings), $e 673| ); 674| 675|

【问题讨论】:

你不能那样做.. RDS 会阻止来自 laravel 的查询,也许你在 RDS 中为此创建了一个权限......但最简单的方法是运行 aws ligthsail 而不是 beanstalk,这样你的代码和数据库就在同一个服务器上,这就是我所做的。 @Alex Guerrero 我编辑了所有安全组并为所有流量打开了所有端口(用于测试目的),因为我只是想让它工作。但它没有。那为什么我不能这样做呢? 【参考方案1】:

我解决了我自己的问题。

我通过SSH在/var/www/html目录中运行

php artisan 迁移 -vv

获取调试日志和迁移过程的堆栈跟踪。 我注意到 Laravel 在运行迁移命令时没有使用环境变量(DB_HOST 等)。 所以我添加了 .ebextensions 目录并创建了一个新文件:migration.config

container_commands:
     01migrations:
        command: "php artisan migrate"

现在迁移正在运行,因为 Laravel 可以访问环境变量。 因此,即使是最新版本的 Laravel 7、mysql 8.0.17 和 PHP 7.4 也适用于 Elastic Beanstalk RDS。

编辑: 如果您已在 AWS 中指定为环境变量:

APP_ENV = "生产"

使用php artisan migrate --force 而不是php artisan migrate

问候 NKol

【讨论】:

以上是关于Laravel 7- AWS - 运行“php artisan migrate”时出现 Elastic Beanstalk + RDS 错误的主要内容,如果未能解决你的问题,请参考以下文章

错误 PHP - 无法分配内存(laravel + aws)

使用 AWS Elastic Beanstalk 的 Laravel 队列

AWS Beanstalk 使用 Grunt 任务部署 Laravel

Laravel 5.6 '/' 找到路由但未找到其他路由 AWS EC2

使用 aws fargate 有啥缺点(缺点)以及为啥我的 laravel 应用程序在 Fargate 与弹性 beantalk 上运行缓慢?

无法使用 Forge、nginx 和 AWS 连接到 Laravel Websocket