OpenPNEをさくらのレンタルサーバーで正常に運営するのは無理(だろう)

OpnePNEでちょっとした運営をしようとしているところでの作業でわかったことです。

わかったのは、OpenPNEをさくらのレンタルサーバーで運営すると不具合続出で後で困るぞ~と。

ちょっと遊んだり、デザインを試したりする程度ならいいのかもしれませんが、運営レベルだと不可能だと思います。

その状態となる理由を順序をつけて説明。(10/05 追記:現段階なら下記のような問題がなくなっているので大丈夫かもしれません。)

1. さくらのレンタルサーバーのMySQLはデータベースエンジンが強制的にMyISAMとなり、InnoDBを使うことができない

これはどうやらさくらの仕様のようです。ちょっと検索で調べてみましたが、そのように書いているページがいくつも見受けられました。

これが前提条件その1です。MyISAMではトランザクションを扱うことができないのでこれが次に響いてくるようです。

2.MyISAMで外部キー処理を行うときのon delete cascade制約をつけることができない

これはMySQLのMyISAMでテーブルを作ると無理なようです。おそらくトランザクションが使えないために、親キーの削除の検出が難しいのでしょう。

というより、もしかしてそもそも外部キーを与えるような処理ができないとか?(これを書いているときには調べていないので)

前提条件その2はMySQLのテーブル状態による問題ですね。自前のテスト鯖を使っていたときには全く気がつかなかった現象です。(InnoDBが使えるので)

3.OpenPNEで一部のデータを削除するときにこのon delete cascade制約があることを前提としている

たとえばメンバーの削除処理(退会処理)ですね。メンバーが削除されるときにそのメンバーに関する情報をすべて削除する必要があります。

これを簡単に処理するには、データベースのテーブルに対して外部キーとon delete cascade制約により親キー削除とともに一斉に削除してもらうのがいいのです。

つまり、OpenPNE(私が確認している範囲では3.0以降)では、MySQLのテーブルはすべてInnoDBとして動作する、という前提で動作するようです。

で、これを結合すると得られる結論は、

さくらのレンタルサーバーで運営を行おうとするとメンバーの退会処理など一部の削除処理を行うとデータが正常に削除されず、それによる弊害が発生する

というものです。

ちなみに、メンバーが退会するとその人とお友達になっていた人はもれなくログインできなくなります。(member_relationshipなどに対象ユーザーのデータが残ったままになるため)

それ以外の弊害はちゃんと確認はできていませんが、ある意味致命傷な現象なので運営では使用しない方がいい、というものでした。

まじめに運営したい場合は、MySQLでInnoDBを使える+ターミナルログインができるレンタルサーバーを借りるか、VPSなどでrootを取得できるサーバーで運営するか、自鯖運営をやってみるか、それくらいですね。

最初の条件に当てはまるようなレンタルサーバーが安い値段で存在するかどうかはかなり怪しいですが・・・。

10/05 追記

このような変更がさくらのレンタルサーバーであったので、いまであればOpenPNEを運営することができるかもしれません。

これについては実験してみないと何ともいえませんが・・・。


コメントを残す

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

この記事のトラックバック用URL