誰かが私を解決するのを手伝ってくれることを望んでいる興味深い問題があります。非常に大規模な PHP サイトのソース コードを格納するために使用する Subversion リポジトリがあります。私のセットアップに関する重要な詳細は次のとおりです。
- サイトの dev バージョンは /var/www/sitename-dev のサーバーにあり、リポジトリから svn チェックアウトを実行して作成されました。
- サイトのライブ バージョンは /var/www/sitename にあり、これも svn checkout で作成されています。
- コミットのたびに開発サイトで svn 更新を実行し、コミット ログ エントリに特別な展開キーワードが含まれている場合はライブ サイトで svn 更新を実行するリポジトリには、コミット後のフックが設定されています。
- 上記のすべてがうまく機能し、私のチームの生産性が大幅に向上しました。
このサイトの目的は、多くの企業が必要とする一連のコア機能を提供し、当社の製品を購入する各企業が、当社の機能を提供する独自のブランド サイトを持てるようにすることです。これは、Smarty テンプレート エンジン (優れています) を使用して実現されます。各ブランド サイトは同じコア ファイルを共有し (したがって、コア ファイルのバグを修正すると、すべてのサイトで修正されます)、/resources/site にあるテンプレートのディレクトリ構造があります。/resources/site 内の各ファイルが必要ですが、内容はサイトごとに異なります。
私ができるようにしたいのは、サイトの管理者セクションに、既存のデフォルト サイトの /resources/site ディレクトリのクローンとして新しいブランド サイトを作成するフォームを作成することです (/var/ のローカル コピー内)。 www) を作成し、それを Subversion リポジトリに追加します (add/commit)。これにより、次の svn 更新の直後にテンプレートのやり直しを開始できます。
これが私がこれまでに持っているものです:
public function addNewSiteHandle($handleName){
try{
$resourceRoot = "/var/www/site";
echo "Resource Root = ".$resourceRoot."<br />";
$resourceRoot .= "/resources";
echo "Resource Root = ".$resourceRoot."<br />";
$this->recursiveCopy($resourceRoot."/rtx", $resourceRoot."/".$handleName);
$files = array();
foreach(scandir($resourceRoot."/".$handleName) as $file){
if($file != "." && $file != ".." && $file != ".svn"){
echo "Processing \"$file\"<br />";
svn_add($resourceRoot."/".$handleName."/".$file, true, true);
array_push($files, $resourceRoot."/".$handleName."/".$file);
}
}
svn_commit("Handle \"$handleName\" added through the Website.", $files);
}
catch(Exception $e){
error_log($e->getMessage());
}
}
これはエラーで不平を言います:
[2012 年 8 月 15 日水曜日 14:31:01] [エラー] [クライアント 192.168.1.x] PHP 警告: svn_add(): svn エラーが発生しました\n155007 (パスは作業コピー ディレクトリではありません) '/var/ www/site/resources/testtt43' は作業コピーではありません\n /var/www/site/Subversion.class.php の 76 行目、リファラー: http://b1.festivadev.com/cloneTest.html
サイトが作業コピー ディレクトリであることはわかっているので、何が問題なのかわかりません。何か案は?