Windows+symfony1.1でproject:deployを動かすためのパッチ

[追記 2010-08-16] symfony1.4ではこのあたりのコードが変更され、別のバグ(#8177)になっているみたいです。こちらを参照

symfonyには、ローカルから変更されたファイルだけを見つけてホストへアップロードしてくれるproject:deployというコマンド(symfony1.0ではsync)があります。書き換えたファイルを自分で選んでFTPでアップロード、なんてことはなくなるのでミスも減るし、なにより楽です。

前準備として、rsyncクライアントが必要なので、Windowsで動くcwRsyncを入れて、PATHを通しておきます

config/properties.iniで、デプロイ(展開)先のホストの情報を設定しておきます。

[production]
host=my.example.com
port=22
user=webmaster
dir=/home/htdocs/myapps/hoge

rsync_exclude.txtのほうは、ホストに上げたくないファイルを書くのですが、とりあえず初回はデフォルトのままでもいいかと。後で、ホストの環境向けに書き換えるファイルとかが出たときは、それをローカルのファイルで上書きしないよう、このファイルに追加しておきます。

あとは、プロジェクトのトップディレクトリでコマンドを打てばいいのですが、

> symfony project:deploy production

Windowsではこれが何も言わずに止まってしまいます。1.0からある問題で、1.0ではたとえばこちらで対処方法が書かれています。あとこれとかここも。

symfony1.1では、コマンド名や内部で呼ばれているファイルが変わったので、同様の対処をするには

> edit (symfony1.1)/php/symfony/task/sfFilesystem.class.php

のファイルを探して、passthru()を呼んでいるところを、下のように書き換えてください。

//  passthru($cmd.' 2>&1', $return);
    if (DIRECTORY_SEPARATOR == '\\') {
      passthru('start ' . $cmd.';pause', $return);
    } else {
      passthru($cmd.' 2>&1', $return);
    }

これで、

> symfony project:deploy production

と入力すると、別のコマンドプロンプトが開き、そこでホストのパスワードを尋ねてくるようになるはずです。

上のコマンドでは、どのファイルがアップされるかの確認だけになります(上記の修正では新しく開いたウィンドウがすぐ閉じてしまうので、実際には確認は大変ですが)。本当にアップロードを行なうには、オプションを追加して、

> symfony project:deploy –go production

とします。1.0とはいろいろと変わっていて面倒ですが、まあしょうがないか。

ああ、あとsymfonyのバージョンを上げるために pear upgrade symfony/symfony とかすると、書き換えたファイルがまた元に戻っちゃいます。1.1.0から1.1.1に移行してまた動かなくなってしまった。

[追記 2008.05.06] symfony1.2.6でも、まだこの問題は残ったままです。

「Windows+symfony1.1でproject:deployを動かすためのパッチ」への1件のフィードバック

コメントは停止中です。