テスト系その2

閲覧数: 84(0)

このサイトは個人用ブログだけど、ローカルにテスト系を持っている。個人ブログ運営者なら、記事のバックアップを持っていれば良い方だけど、ここではローカルではあるけど、完全に別のシステムで同じソフトウェアを稼動させて、テストや開発を本番系に影響を与えずに行うとてもオタクな環境が用意されている。一応データのバックアップも兼ねて、本番系からテスト系へのデータコピースクリプトも書いた。ブログの記事自体は、データベースに文字として保存されているので、データベースを本番系からテスト系へコピーすることで、記事のコピーは完了する。記事中に挿入されている画像などのメディアファイルは、ファイル名と保存先がデータベースに記述されているけど、実体はデータベースの外にあり、データベースをコピーしただけでは本番系からテスト系へはコピーされない。

「画像ファイル名を読み込んでローカルに存在するかチェックする」

#!/bin/sh
SQL_TABLE="テーブル名"
WORDPRESS_DIR="ローカルのインストールパス"
IMAGE_DIR="$WORDPRESS_DIR/wp-content/uploads"
REMOTE_PATH="サーバー/wp-content/uploads"
SQL_CMD_FS="SELECT meta_value AS '' FROM wp_postmeta WHERE meta_key='_wp_attached_file';"
images=$(echo $SQL_CMD_FS | mysql --defaults-extra-file=.my.cnf $SQL_TABLE)
for image in $images
do
year=$(echo $image | cut -c1-4)
month=$(echo $image | cut -c6-7)
target="$IMAGE_DIR"/"$image"
if [ -f $target ]; then echo file exists skip $target

画像ファイルのフォルダ毎圧縮して、ダウンロードして解凍する方法でも画像ファイルのコピーは出来なくはないが、あまり美しい解決策とは言えない。だいたい、毎回全体をコピーすると、時間もかかり効率的ではない。理想的には、記事をデータベースコピーでテスト系へ移したあと、データベースを読み込んで、画像一覧を抽出し、テスト系の画像フォルダとマッチングして、存在しない画像だけをサーバーからダウンロードする方法。

「画像ファイルが存在しなかったら、本体と縮小サイズをダウンロードする」

else
url="$REMOTE_PATH"/"$image"
echo downloading $url
wget -a ./getImages.log --restrict-file-names=nocontrol -P "$IMAGE_DIR"/"$year"/"$month" $url
SQL_CMD_SZ="SELECT meta_value AS '' FROM wp_postmeta WHERE post_id IN (SELECT post_id AS '' FROM wp_postmeta WHERE meta_value='$image');"
SZ=$(echo $SQL_CMD_SZ | mysql --defaults-extra-file=.my.cnf $SQL_TABLE)
sizes=$(echo $SZ | grep -o '[0-9]*x[0-9]*')
urlhead=$(echo $url | head -c-5)
urltail=$(echo $url | tail -c-5)
if [ "$urltail" = "jpeg" ]; then
urlhead=$(echo $url | head -c-6)
for size in ${sizes[@]}
do
url="$urlhead""-${size}"".jpeg"
echo $url
wget -a ./getImages.log --restrict-file-names=nocontrol -P "$IMAGE_DIR"/"$year"/"$month" $url
done

いくつかハードルがあって、一つの画像ファイルでも、実際には縮小サイズやアイキャッチ画像サイズなど、画像毎に複数の異なるサイズを持っていること、画像ファイルの拡張子が単一でない(JPEG, JPG, PNGなど)ことなど、解決すべき課題は多い。

「JPEG以外の3文字拡張子にも対応する」

else
for size in ${sizes[@]}
do
url="$urlhead""-${size}""$urltail"
echo $url
wget -a ./getImages.log --restrict-file-names=nocontrol -P "$IMAGE_DIR"/"$year"/"$month" $url
done
fi
fi
done

ある画像が、複数の画像サイズのファイルを持っていることは、データベースに書いてあるので、それを読み込んで、サイズ情報に整形(640×250とか)し、ダウンロードすべきファイル名を完成させることが出来た。予め読み込んでおくと無駄になるので、ダウンロードすべき画像だと判断したあとに、データベースを読みに行くことで、パフォーマンス劣化を防いでいる。拡張子は、JPEGとそれ以外の3文字拡張子に対応するようにした。

折角、画像ファイルに手を入れるのだから、現在のテーマに合ったアイキャッチ画像サイズも追加で生成することにした。既存の古い投稿は、違うテーマの時に書かれていて、現在のテーマが使用するアイキャッチ画像サイズを生成していなかった。これもうまく解決したはず。

スキル維持用としては、とても上手く機能している本番系とテスト系だな。

Syntaxhighlighterの行番号とコード本文がずれていたので、syntaxhighlighter3フォルダの/styles/shCore.cssで調整する。vertical-alignをbaselineからmiddleへ変更。これも有名なプラグインで多くのサイトで使われている。テーマとの相性があるみたいで、Fashionistaではずれます。ずれたままのサイトも結構あって、気にならないのかな?と他人事ながら心配したりw

.syntaxhighlighter textarea {
vertical-align: middle !important;
}

最終更新日: 2017年10月22日

カテゴリー公開, 閑話(IT)タグ, , ,
いまさらdotproject、続き

前回(これ)は古いオープンソースのプロジェクトマネジメントツール導入の話でした。当時PHPは5.3で  続きを読む

カテゴリー制限
blank

カテゴリー制限はこのサイトでは過去に何度も出題された「頻出過去問題」です。初期の頃は「Allow C  続きを読む

鬼門に挑戦
blank

Wordpressのバージョンアップに合わせてテーマも更新されたので、また細部の調整をした。アイキャ  続きを読む

超高速WEBサイト?
blank

NGINXとHHVMを使った超高速WEBサイトを目指して新しいインスタンスを立てた今回の「引越」でし  続きを読む

zabbix 4.0
blank

昨日の「ラズパイ」に続いて他のサーバーもZABBIXエージェントのバージョンアップを行います。AWS  続きを読む

SSL化完了
blank

最近は、個人のブログ(サーバー)でもSSL(Secure Sockets Layer)化するのが流行  続きを読む

スポンサーリンク

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください