CakePHP2.2でテーブルを作成したのにテーブルがないと怒られた場合

プロダクション環境に置いたCakePHP2.2のプログラムを書き換えて、新しいテーブルを追加し、新しいモデルを追加しようとしました。
しかしながら、テーブルがないというようなエラーが出ました。

Table graphs for model Graph was not found in datasource default.

テーブルは追加されているがエラーが出る

テーブルは確かに追加しました。

create table if not exists graphs (
    id int unsigned primary key auto_increment,
    user_id int unsigned not null,
    name varchar(64) not null,
    public boolean not null,
    created timestamp not null,
    modified timestamp not null
) engine=innoDB default charset=utf8;

でも毎回エラーが出る。

デバッグモードでない場合はテーブル定義がキャッシュされている

どうやら最近のCakePHPは、しっかりキャッシュが作りこまれているらしく、テーブル定義の取得処理を何度も走らせないようです。
Config/core.phpにdebugレベルの設定がありますが、これが0、要するにプロダクション用のモードになっていると、テーブルを追加してもテーブル定義のキャッシュが優先されてしまうようです。

モデルのキャッシュディレクトリを削除

そういうわけで、モデルのキャッシュ情報を削除してやれば、キャッシュが再構築されます。

rm app/tmp/cache/models/*

サービスを稼働させながらテーブルを追加しようという場合は注意が必要です。

コメント

タイトルとURLをコピーしました