Catalyst+FastCGIで「MySQL server has gone away」→mysql_auto_reconnect[DBIC]

[error] DBIx::Class::ResultSet::pager(): DBI Exception: DBD::mysql::st execute failed: MySQL server has gone away

なんていうエラーが出てたのですが、

FastCGI(Catalystの方?)では$ENV{GATEWAY_INTERFACE}も$ENV{MOD_PERL}もないので、どうもmysql_auto_reconnectを自分でOnにしないとだめなようです。

とのことです。非常に助かります。

早速connect_infoの属性にmysql_auto_reconnectを加え、
Model::MyModel:
  schema_class: MySchema
  connect_info:
    - [dns, user, pass]
    - AutoCommit: 0
      mysql_auto_reconnect: 1
$c->model('MyModel')->storage->dbh->{mysql_auto_reconnect}が1になってることを確認しました。 明日の朝、例のエラーが出なくなってるかどうかを確認。
結果、ダメでした!なんでかなーと思ってドキュメントをちゃんと読んでみたら、
This attribute is ignored when AutoCommit is turned off, and when AutoCommit is turned off, DBD::mysql will not automatically reconnect to the server.
とか書いてあるよ!Σ(゚Д゚なんてこった! とりあえず、connect_infoの属性のAutoCommitを1にしてみた。
Model::MyModel:
  schema_class: MySchema
  connect_info:
    - [dns, user, pass]
    - AutoCommit: 1
      mysql_auto_reconnect: 1
明日の朝、例のエラーが出なくなってるかどうかをもう一度確認。。。 これAutoCommitにしたくないときは、AutoReconnectを使わずに自前で「一定時間毎にSELECT 1を実行する」みたいにしなきゃいけないのかな?


mysql_auto_reconnectに言及している人、少ないなあ。

今更追記しますが、少ないのは当たり前かも。DBICを使うとき普通AutoCommitをオフにしません。参考:DBIx::Classで手動コミット - Lyo.blog