Migrations プラグインがサポートするデータベースは MySQL のみ?
https://github.com/CakeDC/migrations
CakePHP のデータベーススキーマの管理用に Migrations プラグインがある。
Migrations プラグインで残念なことは、CakePHP の Schema クラスがサポートしていないクエリはプラグイン内部 (CakeMigration クラス)で SQL を生成しているのだが、 MySQL を前提にした SQL を発行しているので、PostgreSQL などでは使えない機能がある。(またはバージョンアップで使えなくなる)
たとえば、rename_table は、2.2 以降利用できなくなってしまった。
仕方がないので、rename_table はやめて直接 ALTER TABLE を実行するように変更した。
追記 (2013-12-25)
上記の不具合は、バージョン 2.2.3 で解決しました。
PukiWiki 派生プロジェクト
Google Apps を使用したり、Redmine などでも Wiki が使えたりする関係で、新たに単独で Wiki サーバを立てることはなくなったが、今でも一部 PukiWiki を使用している。
PukiWiki: http://pukiwiki.sourceforge.jp/
Pukiwiki の開発が止まっていることに対する記事 ( http://blog.sarabande.jp/post/46424933556 ) を読んで、派生プロジェクトにどんなものがあるか気になったのでググってみた。
PukiWiki Advance
PukiWiki をベースに PukiWiki Plus! が作られ、PukiWiki Plus! をベースに PukiWiki Advance が作られているっぽい。
その他:http://ja.wikipedia.org/wiki/PukiWiki#.E6.B4.BE.E7.94.9F.E7.89.88
PHP で pkcs12 形式の SSL 証明書を pem 形式に変換
ApnsPHP でプッシュ通知するのにサーバ側にPEM形式の証明書が必要。
https://code.google.com/p/apns-php/wiki/CertificateCreation
証明書を更新するたびに openssl コマンドを打つのも面倒なので、PHP プログラム内で作成できるようにした。ついでに秘密鍵のパスフレーズもリセットしている。
<?php // pkcs12 形式の証明書を読込 (source.p12) $pass = '証明書作成時のパスフレーズ'; $pkcs12File = 'source.p12'; $pkcs12 = file_get_contents($pkcs12File); $certs = array(); openssl_pkcs12_read($pkcs12, $certs, $pass); // パスフレーズをリセット $pkey = null; $newPass = null; openssl_pkey_export($certs['pkey'], $pkey, $newPass); // PEM 形式で保存 (output.pem) $pemFile = 'output.pem'; file_put_contents($pemFile, $certs['cert'] . $pkey);
vagrant init の第2パラメータでちょっと楽する
久々の Vagrant ネタ。
Vagrantfile に ダウンロード先 URL (box_url) を設定しておくことで、 vagrant up 実行時にベースBOXが無かった場合は BOX を自動的にダウンロードしてくれるので、初回の vagrant box add が省略できて重宝している。
複数人での開発の際、この設定(box_url)は、WEBサーバー上に BOX を配備することと共に必須の設定だと思う。
今までは vagrant init 直後に Vagrantfile を編集して設定を追加していたのだが、いつからか vagrant init の第2パラメータで指定できるようになったようだ。空の状態から2ステップで仮想マシンが起動できるのでちょっと便利になった。
$ vagrant init precise32 http://files.vagrantup.com/precise32.box $ vagrant up
vagrant 1.0.7 で vagrant init したところ、Vagrantfile に以下の設定が有効になる。
config.vm.box = "precise32" config.vm.box_url = "http://files.vagrantup.com/precise32.box"
CREATE OR REPLACE LANGUAGE をシミュレートする
PostgreSQL で plpgsql を利用するには CREATE LANGUAGE する必要があるが、複数回実行すると2度目からエラーになってしまう。
"CREATE OR REPLACE" 的なことはできないかどうかググったところ、そのものずばりがかかれてあった。
http://wiki.postgresql.org/wiki/CREATE_OR_REPLACE_LANGUAGE
CREATE OR REPLACE FUNCTION make_plpgsql() RETURNS VOID LANGUAGE SQL AS $$ CREATE LANGUAGE plpgsql; $$; SELECT CASE WHEN EXISTS( SELECT 1 FROM pg_catalog.pg_language WHERE lanname='plpgsql' ) THEN NULL ELSE make_plpgsql() END; DROP FUNCTION make_plpgsql();
Chef でクエリを初回のみ実行する方法が分からなかったため調査していたのだが、これで Chef で複数回実行しても大丈夫になるはず?
CakePHP 2.x キャッシュファイルのパーミッション変更
cake コマンド実行するユーザと apache のユーザが異なる場合、キャッシュ周りでパーミッションエラーが発生してしまう。誰でも書込みできるように権限を設定するには、Cache::config() に "mask" というパラメータを追加してやるとよいらしい。
また、設定値は "数値 (例:0666)" でなければならないとのこと。文字列ではダメみたい。
/app/Congfig/core.php <?php /** * Configure the cache used for general framework caching. Path information, * object listings, and translation cache files are stored with this configuration. */ Cache::config('_cake_core_', array( 'engine' => $engine, 'prefix' => $prefix . 'cake_core_', 'path' => CACHE . 'persistent' . DS, 'serialize' => ($engine === 'File'), 'duration' => $duration, 'mask' => 0666 )); /** * Configure the cache for model and datasource caches. This cache configuration * is used to store schema descriptions, and table listings in connections. */ Cache::config('_cake_model_', array( 'engine' => $engine, 'prefix' => $prefix . 'cake_model_', 'path' => CACHE . 'models' . DS, 'serialize' => ($engine === 'File'), 'duration' => $duration, 'mask' => 0666 )); ?>
CakePHP 2.3.0 上の Migrations プラグインの注意
CakePHP 2.3.0 が正式にリリースしたのだが、 Migrations プラグインの master ブランチでは 2.3.0 は、未対応。公式な解決策としては、develop ブランチを使うといいとのこと。
https://github.com/CakeDC/migrations/issues/107
とりあえず master ブランチ動作させたかったので、AppShell に
<?php App::uses('ClassRegistry', 'Utility');
の一行を追加して対応してみた。