Rails 如何做到 MySQL 未启动,Rails 应用启动不报连接 MySQL 错误?

houjinan · 2016年11月25日 · 最后由 bianjp 回复于 2016年11月28日 · 1609 次阅读

rails 应用和 mysql 部署在不同的服务器上面。 服务器偶尔断电服务自启后,往往 mysql 启动比较慢,rails 应用启动时又依赖 mysql 连接。

如何才能做到 Mysql 未启动,Rails 应用启动不报连接 mysql 错误?

可能要研究一下 MySQL 的连接有没有超时控制机制,但是怎么判断 MySQL 正在启动和启动失败?

我觉得应该做的是 MySQL 还没有启动前,不应该启动 Rails.

#!/bin/bash
function is_db_up {
  nc -z -w5 MYSQL_IP MYSQL_PORT
}

echo -n "Waiting for db to be up..."
until is_db_up ; do
  printf '.'
  sleep 1
done
echo done\!

# start rails application

楼上检测 MySQL 是否启动的方法依赖 nc,需要单独安装。发现一种只依赖 bash 的方案

is_db_up(){
  timeout 5s bash -c 'echo > /dev/tcp/example.com/3306'
}

至于连接数据库,Rails 是在内置的 Initializers 中的 active_record.initialize_database 初始化连接的,我之前有其它需求想删除这个 initializer,但没找到方法。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号