テスト系その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閑話, 公開タグ, , ,
検索精度を高める
2020年11月1日

検索ネタを連発するのはElasticsearchやElasticPressがバージョンアップした時の  続きを読む

ElasticPress日本語設定2020年版
blank
2020年10月29日

ElasticsearchをWordpressで利用するためのプラグインであるElasticPres  続きを読む

ElasticPress 3.5
blank
2020年10月22日

Elasticsearch用のプラグインであるElasticPressがメジャーバージョンアップ(3  続きを読む

Elasticsearch 6.8.11
blank
2020年10月2日

2017年末に「2.4.6」から「5.6.5」へバージョンアップして以来の大幅バージョンアップです。  続きを読む

パンくずリスト詳細
blank
2020年5月12日

テーマの「マイナーチェンジ」に伴って「パンくずリスト」の仕様を若干変更しました。一つ前のテーマではパ  続きを読む

カテゴリーを制限する
blank
2020年5月11日

過去に何度も書いた「カテゴリー制限」の話、元はと言えば初期に書かれた「非公開」の記事が原因です。トッ  続きを読む

コメントを残す

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