【问题标题】:Connecting remote mysql database to heroku rails app将远程 mysql 数据库连接到 heroku rails 应用程序
【发布时间】:2019-04-07 10:46:47
【问题描述】:

我刚刚创建了一个在 localhost 上工作的 api,但是在将它部署到 Heroku 并通过 Postman (https://app_name.herokuapp.com/api/v1/ads) 发送 GET 请求后,我收到 500 内部服务器错误。当我查看heroku logs 时,我得到了这个:

2018-11-03T09:21:21.115723+00:00 heroku[router]: at=info method=GET path="/api/v1/ads/1" host=app_name.herokuapp.com request_id=ea2d91ec-876f-4734-bf3b-997cdd9a5cca fwd="79.150.223.197" dyno=web.1 connect=0ms service=26ms status=500 bytes=274 protocol=https

在生产环境下的 database.yml 中,我的 api 链接到外部数据库,如下所示:

production:
  <<: *default
  host: host_name
  database: db_name
  adapter: mysql2
  encoding: utf8
  username: user_name
  password: ENV['DB_PASSWORD']

来自此来源:Remote mysql database on Heroku app

heroku config:add DATABASE_URL=mysql://username:password@host:3306/dbname

得到了这个:

Setting DATABASE_URL and restarting ⬢ app_name... !
 ▸    Cannot overwrite attachment values DATABASE_URL.

然后基于问题:How to change DATABASE_URL for a heroku application

在 Heroku 中添加了一个 ClearDB mysql 插件并删除了 Postgres 插件。

然后我这样做了:

heroku config:add CLEARDB_DATABASE_URL=mysql://username:password@host:3306/dbname

然后拿回来了:

Setting CLEARDB_DATABASE_URL and restarting ⬢ app_name... done, v16
CLEARDB_DATABASE_URL: mysql://username:password@host:3306/dbname

之后尝试向https://app_name.herokuapp.com/api/v1/ads 发送一个新的 GET 请求并得到回复:

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta charset="utf-8">
        <title>Application Error</title>
        <style media="screen">
          html,body,iframe {
            margin: 0;
            padding: 0;
          }
          html,body {
            height: 100%;
            overflow: hidden;
          }
          iframe {
            width: 100%;
            height: 100%;
            border: 0;
          }
        </style>
    </head>
    <body>
        <iframe src="//www.herokucdn.com/error-pages/application-error.html"></iframe>
    </body>
</html>

heroku 日志给出了这个:

2018-11-03T11:53:13.315968+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/api/v1/ads/1" host=app_name.herokuapp.com request_id=0f339471-a5b8-4402-9941-d3aad757f9c7 fwd="79.150.223.197" dyno= connect= service= status=503 bytes= protocol=https

我几乎尝试了一切。有人可以帮帮我吗?

【问题讨论】:

    标签: mysql ruby-on-rails api heroku


    【解决方案1】:

    确保设置了所有环境变量

    在您的 Heroku 应用环境中,设置以下内容:

    CLEARDB_DATABASE_URL = mysql://username:password@host:3306
    DB_PASSWORD = <YOUR PASSWORD>
    DB_NAME = db_name
    

    在database.yml中

    production:
      <<:       *default
      host:     ENV['CLEARDB_DATABASE_URL']
      database: ENV['DB_NAME']
      adapter:  mysql2
      encoding: utf8
      username: user_name
      password: ENV['DB_PASSWORD']
    

    请确认默认端口与您的生产数据库相同。如果不: 设置端口

    production:
      <<:   *default
      port: 3306
      ...
    

    【讨论】:

    • '请确认默认端口与您的生产数据库相同。如果不是:设置端口'@Amanze 我如何准确验证这一点?
    • 对不起,我仍然在 heroku 日志中收到同样的消息:2018-11-03T13:50:09.982629+00:00 heroku[router]: at=info method=GET path="/api/v1/ads" host=app_name-api.herokuapp.com request_id=81af0755-c569-44e3-876b-e460f3aa6bbb fwd="79.150.223.197" dyno=web.1 connect=1ms service=78ms status=500 bytes=274 protocol=https 和 500 内部服务器错误。
    • @OKMantis 在 database.yml 中,如果端口值设置为 3306,请检查默认配置。如果是,那么你没问题。如果没有,请在您的生产配置部分中设置 port: 3306
    • 能否请您分享您的database.yml的sn-p,以便我们找到错误?还有完整的 Heroku 日志heroku logs --tail
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多