現在、アップグレードしたい複数のリポジトリを持つ古いsubversion1.4.2サーバーがあります。私はいくつかのことをしたい:
- Subversionの最新バージョン(1.7以降)に移動する
- リポジトリを別のマシンに分割する
- ホスト名を変更します(これについては後で説明します)
- URLのパスではなくFQDNを使用するように変更します(<-これは私が抱えている問題です)
ただし、ダウンタイムはほとんど必要ありません。これを段階的に(大部分は)ユーザーに対してシームレスに実行したいと考えています。
そのため、サーバーは現在次のように解決されています:svn.svr.mycompany.co.ukユーザーに次の使用に切り替えてもらいたい:svn.mycompanyglobal.net
その新しい名前は、ユーザーがいる大陸に応じて、DNSによって適切なサーバーにルーティングされます。これは機能します。
これは、標準タイプのsvnDAVアクセスを使用したApache2インストールを示しています。
<VirtualHost 10.11.22.33>
Servername svn.svr.mycompany.co.uk
<Location /main>
DAV svn
SVNPath /home/svnrepo/main
[... Some regular auth stuff ...]
SVNIndexXSLT /svnindex.xsl
</Location>
<Location /data>
DAV svn
SVNPath /home/svnrepo/data
[... Some regular auth stuff ...]
SVNIndexXSLT /svnindex.xsl
</Location>
</VirtualHost>
ドキュメントのルートとモジュールに関連する通常のものがありますが、これがその核心です。
したがって、現時点では、http ://svn.svr.mycompany.co.uk/data/Core/Blahからコードをチェックアウトできます。
これで、nginxリバースプロキシをこの前に配置しました。これにはグローバルホスト名があり、次のURLからコードを参照できます:http: //data.svn.mycompanyglobal.net/Core/Blah(「データ」をパスからホストの名前に移動したことに注意してください)。次の構成を追加することで、 nginxでこれを実現しました。
server {
listen 80;
server_name data.svn.mycompanyglobal.net;
proxy_set_header Host svn.svr.mycompany.co.uk;
location = /svnindex.xsl {
proxy_pass http://svn.svr.mycompany.co.uk/svnindex.xsl;
}
location /data/ {
proxy_pass http://svn.svr.mycompany.co.uk/data/;
}
location / {
proxy_pass http://svn.svr.mycompany.co.uk/;
rewrite ^(.*)$ /data$1 break;
}
}
これはすべて機能します。Webブラウザーで、TortoiseSVNのリポジトリブラウザーまたはコマンドライン「svnls」を介してコードを参照できます。これらはすべてプロキシ経由で行われます。
ただし、コードをチェックアウトしようとすると、エラーが発生します
Unusable URI: it does not refer to this repository
私は、これがこの決定を下す(つまり、エラーを発生させる)クライアントであるという結論に達しました。SVNKitのソースコードを見ると、svnクライアントが要求したパスをサーバーが返したパスと比較していることがわかります。理由はわかりませんが、そのように見えます(DavUtilsを参照)。
チェックアウト元のURLを次のように変更することで、この問題(一種)を解決できます。
http://data.svn.mycompanyglobal.net/data
[つまり、リポジトリの名前を最後に追加します]
これは、上記で追加した「/data/」ルートが原因で機能する可能性があります。
誰かがこのようなことをすることができましたか?Subversionサーバーまたはプロキシのいずれかで、Subversionクライアントへのパスの表示を変更するためにできることはありますか?
これを別々のサーバーに配置すると、各サーバーには1つの「場所」(ルート)しかリストされないため、問題が発生しなくなることはわかっていますが、現時点ではこれに余裕はありません。
また、このボックスはロバの何年も前から存在しており、ハードコードされた参照がたくさんあることを覚えておく必要があります。そのため、すべての参照を新しいURL形式に段階的に移動できるように、プロキシする必要があります。
これは長い質問ですが、何を達成したいのかを明確にしたいと思います。私は正気ではないことを私に言ってください-それは私がそれを機能させることにとても近いように感じます:)。