雑種のポメラニアン

フリープログラマーの日記とか人生観とか綴るよ

Railsで「TypeError: can't dup NilClass」

結論ははっきりとは断定できないというか

全く理解を超えていたのだが…
あ…ありのまま 今起こった事を話すぜ!

元々はある会社のシステムのリニューアル
主にRails1→Rails3.1への移行作業を請け負いました。

元のデータベースの命名規則が変だったので
リニューアルに支障がなければ元の構造を維持して
新しいデータベースに移行するツールから開発を開始した。

郵便番号マスタ移行時に旧テーブルを読み込んだときに
「TypeError: can't dup NilClass」が発生した。

ウェブで調べてもよく分からなかったのだが
「きっと何かがduplicateしてるんだろう」と思ってテーブルを調べてみた。
すると旧テーブルのある項目にインデックスが張られてたので
よく調べてみるとインデックスの張られてる項目に重複値があった。

そこでインデックスを削除してみたらWeBrickではうまく動いた。
Passengerがなかなかうまく動かなかったのだが
Apacherestartしたらうまくいった。
ここでreloadではダメだった事を強調しておきます。

ということで、「テーブルのインデックスに重複があると
読み込み時にcan't dup NilClassが発生するらしい」と結論しました。

他に何か分かったらお知らせします。