【问题标题】:Can't Fetch Laravel API Data on Heroku无法在 Heroku 上获取 Laravel API 数据
【发布时间】:2019-09-24 10:05:40
【问题描述】:

我在免费的 Heroku 服务器上部署了 Laravel REST API。我还在已部署的应用程序上安装了 ClearDB MySQL 扩展。

我的问题是,当我在 Postman 中输入我的 URL 以查找我的 API 数据时,我会在某些 HTML 中嵌入此错误消息:

SQLSTATE[HY000] [1045] Access denied for user 'user'@'ip' (using password: YES) (SQL: select count(*) as aggregate from `test_data`)

所以,这是正确的 URL,但由于某种原因,我无权访问它。

我也尝试将本地数据库数据迁移到部署的数据库,但收到以下错误消息:

In Connection.php line 665:

  SQLSTATE[HY000] [1045] Access denied for user 'user'@'ip' (using password: YES) (SQL: select * fro  
  m information_schema.tables where table_schema = heroku_xxxxx and table_name = migrations and table_type =   
  'BASE TABLE')                                                                                                          


In Connector.php line 70:

  SQLSTATE[HY000] [1045] Access denied for user 'user'@'ip' (using password: YES) 

我知道这些是权限错误,但我不确定我为什么会得到它们。我也知道 Heroku 的基础设施依赖于 Postgres,它可能更容易使用。但是现在,至少,我已经有一个 MySQL 数据库,所以我想使用它。因此,我为什么安装 ClearDB 来使用 MySQL 数据库。

在我的 Heroku 配置变量中,我只有这个:

CLEARDB_DATABASE_URL: (The URL)

为什么会出现这些错误?如何获取和查看我的 API 数据?

【问题讨论】:

  • 这看起来像 .env 数据库配置错误。您确定您的设置正确吗?
  • 您好,欢迎来到 Stack Overflow,请编辑您的问题并将代码添加到您的 config/database.php

标签: laravel api heroku deployment


【解决方案1】:

您的环境变量键名不正确。
在您的 .env 或 Heroku 仪表板的配置变量中,您应该有类似的内容

DATABASE_URL=mysql://username:password@us-cdbr-west.cleardb.com/DATABASE?reconnect=true

然后确保您在 config/database.php 中使用该连接

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

【讨论】:

  • 好的,这是否意味着我应该删除我拥有的当前配置变量?如何生成 DATABASE_URL?
  • 要获取数据库 url,您需要添加 ClearDB MySQL 插件。然后转到 Settings 并查看 Config vars,您将在其中找到 CLEARDB_DATABASE_URL。
  • @HarrisonGreeves 你没有“生成”数据库 URL,Heroku 会动态更改凭据,在你的 Heroku 仪表板中找到它,就像@django11 指出的那样,或者只是从终端登录到你的 Heroku 帐户,然后运行heroku config --app [insert application name here]
  • @Caddy DZ 我将 DATABASE_URL 添加到我的配置变量中,并在 database.php 中添加了“url”。然后我将应用程序推送到 Heroku。所以我现在有 2 个配置变量。 DATABASE_URL 和 CLEARDB_DATABASE_URL。这有道理吗?我现在在 HTML 中嵌入了一条不同的错误消息: SQLSTATE[HY000] [2002] Connection denied (SQL: select count(*) as aggregate from test_data
  • 不,CLEARDB_DATABASE_URL 不是必需的,您可以将其删除,并在您的 database.php 中使用 env('DATABASE_URL') 从 heroku config vars 中获取 url
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2021-11-05
  • 2018-12-09
  • 2021-08-20
  • 2021-12-03
相关资源
最近更新 更多