2013年10月27日日曜日

テスト環境と構成管理は初めにしっかりと

会社のオフィシャルHP が 7~8割方出来てきた。

ここ1週間は外出予定があまり無かったので、集中して内勤作業が出来たのが大きい。
(外出ばっかりだったから自宅で進めてたのは、まあご愛嬌)

関係者に確認して貰うためテスト環境を公開したのだが、
まだ制作中のため更新したら随時行うテスト環境の最新化をどうするかなーと。
大掛かりなものでもないので、svn update を定期的にするよう仕込みたかったんだけど問題が発生。
(単に考慮漏れなんだけど orz)

制作は自分のPC上でやっていて、そこではホスト localhost で index.html のリクエストURI は /index.html にしている。
しかし訳あってテスト環境上の リクエストURI は /official/index.html となる。

つまり DocumentRoot にサブディレクトリを含む含まないの違い。
  • http://www.aaaaa.com/index.html
  • http://www.aaaaa.com/official/index.html
のように / と /official/ といったサイトルート相対パスが異なる問題。

このサイトルート相対パスの違いによって問題となったのは、
html ファイル上で参照している js や css や img などの外部ファイルの参照や内部リンクの記述方法。
html ファイルでは参照系は全て以下のようなサイトルート相対パスで記述している。

  
  <link href="/css/official.css" rel="stylesheet" type="text/css"></link>
  <script src="/js/jquery.min.js" type="text/javascript"></script>

しかし自分のようにサイトルート相対パスを、制作している環境の / で構成管理していてしまうと、
サイトルート相対パスが /official/ なテスト環境で svn update すると当然参照系は全滅(omg ...)。
こんなことに時間割いてる余裕も無いので取り急ぎ以下のようなシェルで対応。。

#!/bin/sh
# ====================================================================
# 環境設定
# ====================================================================

# svn リポジトリ URL
SVN_URL="file:///subversion/repos/official-src/trunk/html"

# コンテキスト名
CONTEXT="official"

# ドキュメントルート
DOCUMENT_ROOT="/var/www/html"

# official ルート
OFFICIAL_ROOT=${DOCUMENT_ROOT}"/"${CONTEXT}

# ====================================================================
# 前処理
# ====================================================================

# clean
rm -rf ${OFFICIAL_ROOT}

# ====================================================================
# 本処理
# ====================================================================

# export
cd ${DOCUMENT_ROOT}
svn export ${SVN_URL} ${CONTEXT}

# owner
chown -R apache: ${OFFICIAL_ROOT}

# replace
cd ${OFFICIAL_ROOT}

# 
# /js/  --> /official/js/
# /css/ --> /official/css/
# /img/ --> /official/img/
#
grep -Evl '/js/'  ${OFFICIAL_ROOT} -r | xargs sed -i "s|/js/|/${CONTEXT}/js/|g"
grep -Evl '/css/' ${OFFICIAL_ROOT} -r | xargs sed -i "s|/css/|/${CONTEXT}/css/|g"
grep -Evl '/img/' ${OFFICIAL_ROOT} -r | xargs sed -i "s|/img/|/${CONTEXT}/img/|g"

#
# grep sed 祭りが続く...
#

# end
exit 0

なんかネガティブ対応な気がするし、スマートで無いなぁ(=o=;)
そもそもローカルのルート相対パス側をちゃんとすべきだった気がめっちゃするし(;・∀・)
次はもっと考慮して管理せんと駄目ですね。。

0 コメント :

コメントを投稿