Rails Rails 连接 MySQL 数据库问题

whjwssy2017 · 2017年12月13日 · 最后由 a0nqm 回复于 2017年12月18日 · 1180 次阅读

近日,维护一个ror框架搭建的网站。有时页面访问会出现internal error(redmine 500)的错误。正常情况,刷新一下,页面就正常了,有时刷新也不行,一直处于加载状态,只能重启apache。 报错日志显示:连接被重置

(报错报到了ruby-mysql.gem里面的write函数,显示在sock.flush的时候超时)

mysql数据库不在本地,连接的是远程云数据库

数据库的wait_timeout值为400s,write_timeout为60s vendor文件夹 里面的连接池size是5,连接池的wait_timeout是5s ,mysql数据库驱动安装的是mysql-2.8.1gem(没有用mysql2) 造成以上原因是因为socket超时断掉了,链接失效,但客户端仍发起请求就报500了吗?可以通过修改socket连接机制修复吗? 我在代码里看到数据库配置有reconnet属性,默认为false,我在database.yml里面配置,设为true也不行。vendor文件夹里面rails的东西,ruby-mysql也不敢改. ruby版本是1.8.7的,rails是2.3.5,老网站,版本非常旧。

希望有大神指点迷津= =困扰好久的问题

共收到 8 条回复

里面的连接池size是5,连接池的wait_timeout是5s

测试一下是不是你同时发起10个请求,然后执行后是不是有几个请求被reset.

可以尝试把database.yml 中 pool 设置为20,然后再发起10请求查看一下,之后再改为50,试一下。

awking 回复

测试环境上,只有我自己访问,但有时候也会出现internal error的错误。 连接失效过后,不会有重连的机制吗?在请求之前,不会确定连接是否有效吗?

awking 回复

我是不是不可以修改vendor/rails里面的代码,要不然一升级都白费了。 我修改过pool size,没有效果。 不知道用不用换一个驱动器试一试,之前用的mysql.gem,换一个mysql2试试?

whjwssy2017 回复

我记得以前看过一些东西,上面介绍说推荐使用mysql2(而不是mysql gem)。

在所见过的项目里用到MySQL的也都是用的mysql2,你换一下试试看吧。

a0nqm 回复

我换成了mysql2,我的rails是2.3.5的,特别低。 我在vendor/rails/activerecord/lib/active_record/connection_adapters里面看到只有mysql_adapter.rb,但我发现rails3.1.0以后的文件中,都有一个mysql2_adapter文件。 为什么rails2里面没有呢?我只是在修改database.yml、gem install mysql2 之后gem activerecord_mysql2_adapter了

a0nqm 回复

rails2.3.5

rails3.1.0

更换mysql2之后,到目前为止,上述500内部错误问题,都没有出现!

whjwssy2017 回复

Rails 2.3.5很古老了... 我没有用过,不过这样子没事就好了~

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