【问题标题】:Unable to connect to MySQL database using Laravel Vapor in production无法在生产中使用 Laravel Vapor 连接到 MySQL 数据库
【发布时间】:2020-03-01 13:42:44
【问题描述】:

我有一个简单的小 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

并添加了相关的conn详情

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, $2y$10$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, $2y$10$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 变量,我已经尝试过了,但仍然是同样的问题。

【问题讨论】:

    标签: mysql laravel serverless laravel-vapor


    【解决方案1】:

    您的配置应如下所示:

    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 会自动为您注入它们,并且在您的情况下,您指定的是与 localhost 的连接,而这不是您的数据库所在的位置。

    另请注意,当您在 vapor 中创建数据库环境时,唯一现有的数据库架构将是“vapor”,为了连接到名为“mydb”的自定义数据库,您必须首先在该数据库环境中创建数据库架构。

    【讨论】:

    • 很高兴它对您有所帮助。
    • 我会避免重新生成 jwt 密钥,因为我相信这会使所有现有令牌失效
    • @BobB 你说的很对,回答这个问题的时候我什至没有考虑其余的配置,只是给出了OP的问题的解决方案。也许有钱人应该调查一下。 ?
    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 2020-02-28
    • 2015-03-09
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多