无法在生产中使用 Laravel Vapor 连接到 MySQL 数据库
Unable to connect to MySQL database using Laravel Vapor in production
我有一个简单的小 API,主要用于测试目的内置 Laravel 6 使用简单的 JWT Auth 允许登录并限制对几个路由的访问。所有简单的东西真的很简单,使用 Homestead 效果很好。
但是,在 Vapor 上,我无法让它真正与数据库对话。
这是我的 vapor.yml 的样子,除了在
中添加数据库名称外,它与默认设置没有太大变化
id: 7529
name: mything
environments:
production:
database: mydb
database-user: vapor
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run prod && rm -rf node_modules'
mything-environment:
build:
- 'composer install'
staging:
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run dev && rm -rf node_modules'
我已经使用 vapor CLI 设置了数据库
php vendor/bin/vapor mydb
并编辑了 .env.production 文件
php vendor/bin/vapor env:pull production
并添加了相关的连接细节
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydb
我已经重新部署了无数次,应用程序运行正常。但是,在执行任何类型的数据库工作时,我总是以错误告终,例如:
{"message":"SQLSTATE[HY000] [2002] Connection refused (SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) values (testtest, test@test.com, y$SYYdAXC1aYrFUBQ/wVHcDuUgzBfTK76cvqxaiS2d8Kbg4Vbp/VGXK, 2020-02-29 22:37:36, 2020-02-29 22:37:36))","context":{"exception":{"class":"Illuminate\Database\QueryException","message":"SQLSTATE[HY000] [2002] Connection refused (SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) values (testtest, test@test.com, y$SYYdAXC1aYrFUBQ/wVHcDuUgzBfTK76cvqxaiS2d8Kbg4Vbp/VGXK, 2020-02-29 22:37:36, 2020-02-29 22:37:36))","code":2002,"file":"/var/task/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669","previous":{"class":"PDOException","message":"SQLSTATE[HY000] [2002] Connection refused","code":2002,"file":"/var/task/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70"}},"aws_request_id":"9bba7341-a0f3-481c-961a-a0b59fcb64b9"},"level":400,"level_name":"ERROR","channel":"
任何人都可以指出我正确的方向吗?我不相信我需要为用户和密码添加 .env 变量,我已经尝试过了,但仍然是同样的问题。
您的配置应如下所示:
vapor.yml
id: 7529
name: mything
environments:
production:
database: mydb
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run prod && rm -rf node_modules'
mything-environment:
build:
- 'composer install'
staging:
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run dev && rm -rf node_modules'
如果您使用默认 "vapor" 用户,则无需指定数据库用户。
.env
DB_DATABASE=mydb
除了数据库名称之外,您不应该覆盖任何其他数据库环境变量,因为 vapor 会自动为您注入它们,并且在您的情况下,您指定的是与本地主机的连接,而本地主机不是您的数据库所在的位置。
另请注意,当您在 vapor 中创建数据库环境时,唯一现有的数据库架构将是 "vapor",为了连接到名为 "mydb" 的自定义数据库,您必须首先创建一个数据库该数据库环境中的模式。
我有一个简单的小 API,主要用于测试目的内置 Laravel 6 使用简单的 JWT Auth 允许登录并限制对几个路由的访问。所有简单的东西真的很简单,使用 Homestead 效果很好。
但是,在 Vapor 上,我无法让它真正与数据库对话。 这是我的 vapor.yml 的样子,除了在
中添加数据库名称外,它与默认设置没有太大变化id: 7529
name: mything
environments:
production:
database: mydb
database-user: vapor
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run prod && rm -rf node_modules'
mything-environment:
build:
- 'composer install'
staging:
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run dev && rm -rf node_modules'
我已经使用 vapor CLI 设置了数据库
php vendor/bin/vapor mydb
并编辑了 .env.production 文件
php vendor/bin/vapor env:pull production
并添加了相关的连接细节
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydb
我已经重新部署了无数次,应用程序运行正常。但是,在执行任何类型的数据库工作时,我总是以错误告终,例如:
{"message":"SQLSTATE[HY000] [2002] Connection refused (SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) values (testtest, test@test.com, y$SYYdAXC1aYrFUBQ/wVHcDuUgzBfTK76cvqxaiS2d8Kbg4Vbp/VGXK, 2020-02-29 22:37:36, 2020-02-29 22:37:36))","context":{"exception":{"class":"Illuminate\Database\QueryException","message":"SQLSTATE[HY000] [2002] Connection refused (SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) values (testtest, test@test.com, y$SYYdAXC1aYrFUBQ/wVHcDuUgzBfTK76cvqxaiS2d8Kbg4Vbp/VGXK, 2020-02-29 22:37:36, 2020-02-29 22:37:36))","code":2002,"file":"/var/task/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669","previous":{"class":"PDOException","message":"SQLSTATE[HY000] [2002] Connection refused","code":2002,"file":"/var/task/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70"}},"aws_request_id":"9bba7341-a0f3-481c-961a-a0b59fcb64b9"},"level":400,"level_name":"ERROR","channel":"
任何人都可以指出我正确的方向吗?我不相信我需要为用户和密码添加 .env 变量,我已经尝试过了,但仍然是同样的问题。
您的配置应如下所示:
vapor.yml
id: 7529
name: mything
environments:
production:
database: mydb
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run prod && rm -rf node_modules'
mything-environment:
build:
- 'composer install'
staging:
memory: 1024
cli-memory: 512
runtime: php-7.4
build:
- 'composer install'
- 'php artisan jwt:secret'
- 'php artisan event:cache'
- 'npm ci && npm run dev && rm -rf node_modules'
如果您使用默认 "vapor" 用户,则无需指定数据库用户。
.env
DB_DATABASE=mydb
除了数据库名称之外,您不应该覆盖任何其他数据库环境变量,因为 vapor 会自动为您注入它们,并且在您的情况下,您指定的是与本地主机的连接,而本地主机不是您的数据库所在的位置。
另请注意,当您在 vapor 中创建数据库环境时,唯一现有的数据库架构将是 "vapor",为了连接到名为 "mydb" 的自定义数据库,您必须首先创建一个数据库该数据库环境中的模式。