Debian パッケージで入れた Redmine に作ったプロジェクトが公開になってたので、チケットを登録する前に非公開にしようと設定画面をひらいたら Internal server error が出た。/var/log/redmine/default/production.log を見ると、
ActionView::Template::Error (The single-table inheritance mechanism failed to lo cate the subclass: 'GroupNonMember'. This error is raised because the column 'ty pe' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Principal.inheritance_column to use another column for that informatio n.):
なんて出ている。へー、Rails は type っていう名前のカラムを作ると単一テーブル継承(STI)なんてのが使えるのか。
なるほど、こうやって振る舞いを変えたりとかできるのね。
で、まあなんでこんなエラーが出てるかというとすでに Debian には BTS されていて、
要するに Debian に移植するときに DB 側はそのままに STI のモデルは追加されなかったということみたい。まあ次のバージョンあたりで追加されるんだろうから、直接ファイルを拾ってきて追加してやればいいかな?
$ wget http://www.redmine.org/releases/redmine-3.0.7.tar.gz $ tar xzfv redmine-3.0.7.tar.gz # cp redmine-3.0.7/app/models/group_builtin.rb /usr/share/redmine/app/models/ # cp redmine-3.0.7/app/models/group_anonymous.rb /usr/share/redmine/app/models # cp redmine-3.0.7/app/models/group_non_member.rb /usr/share/redmine/app/models # /etc/init.d/apache2 restart
としてこれでとりあえず動作したようだ。めでたし。
ちなみにQAサイトなど見ると、users テーブルから GroupNonMember タイプのユーザーを削除するみたいな対処をしてる人たちがけっこういるようだけれど、それ次のアップグレードでハマらないんですかね……?