[追記 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でも、まだこの問題は残ったままです。