[Rails][Tips] テストを実行するには、developmentデータベースが最新じゃないといけない

弊社のお問い合わせフォーム、セミナー申し込みフォームは、実はRailsで構築されています。Webページそのものはレンタルサーバで稼働しているのですが、そのレンタルサーバではRailsは動かないので、これらのアプリは自社オフィスのマシンで稼働させています。お問い合わせフォーム、セミナー申し込みフォームとも、入力が完了すると、入力されたお客様のメールアドレスと、弊社の通知用メールアドレスにメールが送信されてくる仕組みになっています。

開発はWindowsマシン上でNetBeans6.1を使って行っています。アプリのアップデートをしたときなどは、 NetBeansからSubversionにコミットした後で、Capistranoでデプロイをします。

稼働しているサーバは本番サーバなので、productionモードで動かしているのですが、サーバがきちんと稼働しているかどうかを定期的に確認するために、cronで毎日夜中の決まった時刻にrake test:functionalsを実行させています。ちょっと、本来のテストの使い方ではないのですが、フォームが正常に稼働することを確認するテストコードが書かれているので、していれば、テストの最後でメールが送信されてくるので、いちいち手動でサイトに接続しなくても、サーバが稼働しているかどうかわかるという仕組みなのです。

あるとき、いつものようにCapistranoを実行してアップデートしたアプリをデプロイしたのですが、次の日からしばらく、テスト実行時に送られてくるはずのメールが送られてこなくなりました。サーバが止まってしまったのかと思い、手動でブラウザから接続してみても、問題なく動いています。

最初は理由が分からなかったのですが、研修講師で外出が続いていたので、オフィスには出ないまま数日が過ぎました。そして久々に出社してtelnetでサーバにログインし、rake test:functionalsを実行すると、その理由が分かりました。

それが、タイトルの内容なのですが、私はCapistrano でデプロイする際には、productionモードのデータベースはマイグレーションを実行するようにしてあったのですが、developmentモードのデータベースにマイグレーションを実行するようには設定していませんでした。

実はrake test:functionalsを実行するには、developmentモードのデータベースもマイグレーションして最新バージョンにしておかなければいけなかったのです。

私のようなテストの使い方は特殊なので、同じように困っている人はいないかもしれませんが、何かの参考になればと思いポストしてみました。

〜〜〜〜〜〜 お知らせ 〜〜〜〜〜〜

弊社ではRuby言語の基礎研修「JavaエンジニアのためのRuby1日入門」「JavaエンジニアのためのRuby入門(夜間)」「Ruby on Railsインストール道場(1)(2)」を開催しております。ご興味がおありの方は是非ご検討ください。お問い合わせだけでも結構です。Rails製のフォームを使って(笑)どうぞお気軽にお問い合わせください。

banner_install_420_96913.png  banner_ruby1day_420_8494.png

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です