Rails 5 API - 即使无法建立与数据库的连接,也加载静态页面

Posted

技术标签:

【中文标题】Rails 5 API - 即使无法建立与数据库的连接,也加载静态页面【英文标题】:Rails 5 API - Load static pages even if connection to database cannot be established 【发布时间】:2021-10-12 16:21:40 【问题描述】:

我从 2 天以来一直在努力寻找解决方案。

我有一个连接到远程 mysql 服务器的 Rails API。问题是当我使 MySQL 服务器脱机时,我的整个应用程序停止工作。我想要一个解决方案,当数据库离线时,我的应用程序可以优雅地将“数据库不可用”消息作为 JSON 返回给任何 REST 请求。

目前,一旦数据库服务器离线,我在开发和 Can't connect to MySQL server on 'XXXX.com' >500 内部服务器生产中的错误。

我的 database.yml 是

default: &default
  adapter: mysql2
  pool: <%= ENV.fetch("RAILS_MAX_THREADS")  5  %>
  username: XXXX
  password: XXXX
  host:  XXXX.com
  port: 3306
  encoding: utf8mb4

development:
  <<: *default
  database: geodatabase

test:
  <<: *default
  database: geodatabase_test

production:
  <<: *default
  database: geodatabase_production

我记得几年前在 Rails 上工作,任何数据库问题仍然会正常呈现静态页面。我不明白为什么它现在不起作用。

谢谢

【问题讨论】:

【参考方案1】:

当数据库连接不工作时,Rails 会抛出这个异常 ActiveRecord::ConnectionNotEstablished

您可以使用以下代码处理此异常

application_controller.rb 文件中,您可以将其放在该行下方。应该是第一行。

rescue_from ActiveRecord::ConnectionNotEstablished, with: :db_connection_error

def db_connection_error
  render json:  error: "DB connection refused" , status: 503
end

【讨论】:

以上是关于Rails 5 API - 即使无法建立与数据库的连接,也加载静态页面的主要内容,如果未能解决你的问题,请参考以下文章

Quickbooks&Rails 5,无法创建发票

Rails 5 API 不生成视图

将Chartkick与rails 5.2 api应用集成?

Rails 5 Api 每次只有 React Native 新会话 ID

LoadError:无法加载“听”gem(Rails 5)

Rails 的 API