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