[Firefox][Tips] 新しいウィンドウが開かなくなる現象

いつからかは忘れてしまいましたが、Firefoxを使っていて新しいウィンドウが開かなくなる現象が起きていました。最初は、セキュリティの強化か何かで、ページ内のJavaScriptの実行が制限されているのかと思っていたのですが、そのうち、ブラウザ内の「新しいウィンドウを開く」ボタンや「Ctrl+N」の操作でもウィンドウが開かなくなっていることに気づき、少々困っていました。私のPCの場合は、ウィルスバスター2009にバンドルされていた「Trend Micro Toolbar」というアドオンを無効にすることで、この現象が解消されました。

送信者 Knowledge-ex. Blog

本当は、この問題に関する設定だけを調整できたりすればよいと思うのですが、スクリーンショットにある「設定」というボタンは有効・無効問わずグレイアウトされているので、個別の調整は難しいようです。そのため、私はアドオンごと無効化しています。 もし、Firefoxをお使いの方でお困りの方がいらっしゃって、参考になりましたら幸いです。

[Rails][Tips] コントローラークラスにsendメソッドを定義するとInternal Server Error

最近、ちょっとした社内システムの構築に久々でRailsを使っているのですが、そこで遭遇したトラブルです。

Railsのコントローラークラスに send というメソッドを定義すると、Internal Server Errorが発生します。ログには次のように出力されます。

送信者 Knowledge-ex. Blog

Processing MaintController#index (for 127.0.0.1 at 2009-04-07 13:06:17) [GET]
Session ID: 84d33a01a55eaf629913bd764838be8b
Parameters: {"action"=>"index", "controller"=>"maint"}
/!\ FAILSAFE /!\  Tue Apr 07 13:06:17 +0900 2009
Status: 500 Internal Server Error
wrong number of arguments (1 for 0)

ブラウザではこんな表示です。

送信者 Knowledge-ex. Blog

Status: 500 Internal Server Error Content-Type: text/html
500 Internal Server Error

「send」というメソッドは、エラーログに「 C:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `send’」という記述があるように、ActionController::Baseの524行目で呼び出される内部的なメソッドの名称として使われているので、ユーザーのコントローラークラスでオーバーライドしてしまうと、本来呼ばれるべき内部のメソッドが参照されずユーザーが実装したメソッドが呼ばれてしまい、エラーになってしまうようです(直接の原因は「wrong number of arguments(1 for 0)」ということで、引数の数が不一致ということです)。

Javaの知識で例えれば、Servletの親クラスに定義されている内部メソッドをオーバーライドしてしまうようなものなので、こういった実装はやってはいけないというのは理解できますね。 ただ、sendというメソッドがActionController::Baseで定義されているかどうかは、少し詳しくソースを追いかけないと、よくわからないですね。

というわけで、ユーザーのコントローラクラスでsendというメソッドを定義したい場合は、ぐっとこらえて他の名称に変更して定義しましょう。

[Rails][Tips] Capistranoのちょっとした仕様変更?

私が、CapistranoというRailsに適したデプロイツールをきちんと調べだしたのは去年の冬くらいからなのですが、そのときは確かCapistranoのバージョンは2.0か2.1くらいだったように記憶しています。

先月くらいでしょうか、弊社で来月から開催する「Ruby on Railsインストール道場」 の動作確認で、会場となる東宝ビル別館のPCルームでCapistranoのインストールをして動作させてみたことがあるのですが、いくらやってもデプロイがうまくいかないのです。

そのときは、何も考えずに「gem install capistrano -y」としていたのですが、実はこのときインストールされたCapistranoのバージョンは2.4でして、バージョン管理システムにログインする際のユーザー名を指定するプロパティ名は「scm_user」だったと記憶していたのですが、バージョンが上がって、どこかのタイミングで「scm_username」にかわったらしく、しかも「scm_user」というプロパティ名は無効になってしまっていたのです。そのためバージョン管理システムへのログインに毎回失敗していた、という顛末でした。

現在のバージョン(マイナーアップされた2.4.3とか)では下位互換性も確保されているのだろうとは思いますが、 その当時はとても焦ってしまった記憶があります。

[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

[Java][Tips] Javaの配列の大きさは、いくつまで指定できるか

以前のエントリーで、「Javaで配列の次元はいくつまで作れるか」というのがありましたが、似たようなご質問をお客様から頂く機会がありました。

Javaの配列の「次元数あたりの配列の長さ」はいくつまで指定できるのでしょうか?

これまた、今まで受けたことのない質問でしたし、自分自身であまり考えたこともなかった内容なので、論より証拠でコードを書いてみました。
続きを読む [Java][Tips] Javaの配列の大きさは、いくつまで指定できるか

[Tips] 「PCサイト->携帯変換スクリプト」を入れてみました

このブログではあまりふれていませんでしたが、実は私は草野球をやっております。
で、一応エンジニアの端くれでもあるので、チームのスケジュールの管理や、練習・試合の参加人数の管理や、会費の帳簿の管理とかを、Webアプリとして作ったりして、自分の家にある自宅サーバで運用したりしております(ドメインはダイナミックDNSを使用)。

で、前々からそれとなく要望されていたのが、「携帯端末への対応」でした。

いつかやらねばと思ってはいたのですが、何しろキャリアごとに仕様も違いますし、同じキャリアでも端末が違えば見た目もかわるらしいので、そんなものにいちいち対応するのは面倒だなぁ、とも思っておりました。

そんなこんなと対応せずに時間が過ぎていくうち、世間の携帯電話にはいわゆる「フルブラウザ」なるものを搭載したものが多くなってきました。こっちが対応しなくても、端末側が普通のHTMLを読めるようになってきたわけですね。

ソフトバンクの孫社長は、「ゆくゆくは全機種にフルブラウザを」というようなこともおっしゃっているみたいですし、そんな状況になってくるとますます自分で携帯端末に対応するのが億劫になってきます。

そんな折に、偶然発見したのが、「PCサイト->携帯変換スクリプト(PC2M)」です。

興味のあります方は↑のリンクを辿ってデモサイトなどを見ていただきたいのですが、実に良くできております。早速、草野球チームのアプリ用にインストールしてみました。ログイン、ログアウトを伴うようなアプリでも全く問題なしです。作者のucbさんに感謝です。

このスクリプトを使うために、昨日初めてPHPをインストールして、Apacheに組み込むセッティングをしてみました。自宅のLinuxはSUSEを使っているのですが、YASTを使えばインストールそのものはとても楽に出来てしまいます。いいですね~。私が学生の頃LinuxをいじりはじめたときはRedHatもRPMもなくて、ソースからmakeしては失敗して挫折したりしていたものですが、ずいぶん便利になったものですね。