読者です 読者をやめる 読者になる 読者になる

@koshian's Tech Log

主に日本語に関する技術などこちらに書こうかと

Redmine on Debian 8.3(jessie) でプロジェクトの設定画面が開かない問題を解決する

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)なんてのが使えるのか。

dev.classmethod.jp

なるほど、こうやって振る舞いを変えたりとかできるのね。

で、まあなんでこんなエラーが出てるかというとすでに Debian には BTS されていて、

#789777 - redmine: The single-table inheritance mechanism failed to locate the subclass: 'GroupNonMember' - Debian Bug report logs

要するに 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 タイプのユーザーを削除するみたいな対処をしてる人たちがけっこういるようだけれど、それ次のアップグレードでハマらないんですかね……?