dropooiの日記

Linux/クラウド/スマホ/IoT関連の情報集め

nginxでもcronolog -Sしたい

nginxでもcronolog -Sしてログを日毎に分けて且つ最新のログのシンボリックリンクを自動生成したい。

 

 

Apacheでよくやる設定

 

CustomLog "|/usr/sbin/cronolog -S /path/log/app/access_log /path/log/app/%Y/%m/%d_access_log" combined

 

nginxだとserverディレクティブのaccess_logにapacheのようには書けない

access_log   /path/log/app/access_log main;

 

https://gist.github.com/ntakaaki/2891895

こちらを参考に

nginxのinitファイルを書き換える

ただし、mkfifoなパイプだとfluentdでtail出来ないので

cronolog_start()内のcronologの実行部分だけちょっと変更

 

==========================================

cronolog_start() {

    if ! [ -p $logdir/access_log_pipe ]; then

       rm -f $logdir/access_log_pipe

       rm -f $logdir/error_log_pipe

       mkfifo $logdir/access_log_pipe

       mkfifo $logdir/error_log_pipe

    fi

    /bin/sh -c "/bin/cat $logdir/access_log_pipe | $cronolog -S $logdir/access_log $logdir/%Y/%m/%d_access_log &"

    /bin/sh -c "/bin/cat $logdir/error_log_pipe  | $cronolog -S $logdir/error_log $logdir/%Y/%m/%d_error_log &"

==========================================

 

 そしてnginxのアクセスログの吐き出し先はパイプを指定

access_log   /path/log/app/access_log_pipe main;

 

これで

access_log_pipeと別にaccess_logという最新ログを参照したシンボリックリンクが出来る。

 

td-agent.confのsourceディレクティブは下記のように設定すればtail可能

  type tail

  path /path/log/api/access_log

  pos_file /path/log/api/access_log.pos

 

 

 

fluent-plugin-tail-ex使えって話もある

 

 

 

 

 

PHP7検証

PHP5.6.14とPHP7.0.0RC4 (10/22時点最新)の性能比較メモ

環境:CentOS7
IDCFクラウド highcpu.M4 cpu x 2 memory 4GB

 

試したい事

  1. PHP5とPHP7の単純な性能比較
  2. 各種Webサーバ Apache(mod_php)、nginx、h2o上でのPHP5とPHP7比較
  3. 上の性能が良い組み合わせ上でフレームワーク(silex)での簡単な比較

 

 準備

MySQLサーバは面倒なのでIDCFクラウドRDBで用意

mysqlクライアントだけyumで入れておく
Apache2.4、Nginxもyumでok

 

H2O
$ git clone git@github.com:h2o/h2o.git
$ cd h2o
$ git submodule update --init --recursive
$ cmake .
#cmakeが古い場合は最新版にする

$ make install

libuvが古いと言われたので
$ wget http://dist.libuv.org/dist/v1.7.5/libuv-v1.7.5.tar.gz
$ sh autogen.sh
$ ./configure
$ make
$ make install
もう一度
$ cd h2o
$make install
ok
適当な場所にH2Oの設定ファイルを記述します。
$ sudo mkdir /usr/local/h2o
$ sudo cp ~/h2o/examples/h2o/h2o.conf /usr/local/h2o/
$ emacs /usr/local/h2o # virtualhostとphp-fpmの設定

 

phpenv+php-buildでphp5と7をインストール


$ git clone https://github.com/CHH/phpenv.git
$ cd phpenv/bin/
$ sh phpenv-install.sh

 

$ cat << EOS > ~/.bashrc

export PATH="~/.phpenv/bin:$PATH"
eval "\$(phpenv init -)"

EOS

$ source ~/.bashrc

 

$ git clone https://github.com/CHH/php-build.git

$ cd php-build/
$ sh install.sh

 

 $ php-build --definitions

5.6.11
5.6.12
5.6.13
5.6.14
5.6snapshot
7.0.0alpha1
7.0.0alpha2
7.0.0beta1
7.0.0beta2
7.0.0beta3
7.0.0RC1
7.0.0RC2
7.0.0RC3
7.0.0RC4
7.0snapshot
master

 

最新っぽいRC4を入れたい

その前に、apxsを有効にしてlibphp.soを生成するように指定

$ emacs /usr/local/share/php-build/definitions/7.0.0RC4
configure_option "--with-apxs2" "/usr/bin/apxs"を一番上に記述

 

$ php-build 7.0.0RC4 ~/.phpenv/versions/7.0.0RC4

エラーが出るので必要なパッケージをインストール

$ yum install libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel

 

もう一度
$ sudo php-build 7.0.0RC4 ~/.phpenv/versions/7.0.0RC4

$ phpenv versions
* system (set by /root/.phpenv/version)
7.0.0RC4

~/.phpenv/versions/7.0.0RC4/bin/php --version
PHP 7.0.0RC4 (cli) (built: Oct 6 2015 02:11:41)
OK!

5.6.14も同様にインストールしておく

 

phpバージョンの切り替えテスト

$ phpenv versions
system
5.6.14
* 7.0.0RC4 (set by /root/.phpenv/version)

$ php -v

PHP 7.0.0RC4 (cli) (built: Oct 6 2015 14:25:27)

$ which php

~/.phpenv/shims/php

 

ok

 

php.iniは

~/.phpenv/versions/{version}/php.ini
php-fpm.confは

~/.phpenv/versions/{version}/etc/php-fpm.conf

 

それぞれ動くように設定しておく。

phpenvで入れるとpeclコマンドがない。

pecl-buildを入れてみる

git clone https://github.com/berenddeboer/pecl-build.git ~/.phpenv/plugins/pecl-build

使い方
% phpenv pecl <package_name>
% phpenv pecl <package_name> -j <php version>
% phpenv pecl <package_name> -a # build all php version by phpenv have.
% phpenv pecl <package_name>-<package_version>

memcachedを入れる
sudo yum install libmemcached libmemcached-devel
phpenv pecl memcached -a

php7には対応していない。。(php5はphpenv peclでok)

php7ブランチがあったのでphp7はphpizeで入れる
git clone -b php7 git@github.com:php-memcached-dev/php-memcached.git
cd php-memcached/

phpize
./configure
make && make install

 

 

Apache(mod_php)

sudo emacs /etc/httpd/conf.d/php.conf

<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

DNS、vhosts設定して

sudo systemctl start httpd

http://example.com/

ok

 

 

パフォーマンステスト

== (test.php)
$time_start = microtime(true);
$loop = 10000000;
for($i=0;$i<$loop;$i++) {
$a = rand()/5;
$b++;
}
$timelimit = microtime(true) - $time_start;
echo $timelimit . " seconds" . PHP_EOL;
==

 

単純な計算をコマンドで実行

PHP 5.6.14

$ php test.php
7.0333759784698 seconds

$ phpenv global 7.0.0RC4
php -v
PHP 7.0.0RC4 (cli) (built: Oct 6 2015 14:25:27)


$ php test.php
0.93678998947144 seconds

 

php7が7倍高速!

 

apache + mod_php

さっきのを1000ループに減らしたもので
php5
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 1450.86 [#/sec] (mean)
Time per request: 68.925 [ms] (mean)

php7
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 3687.95 [#/sec] (mean)
Time per request: 27.115 [ms] (mean)

 

echoするだけのプログラム
php5
ab -c 100 -n 10000 http://example.com/
Requests per second: 2949.06 [#/sec] (mean)
Time per request: 33.909 [ms] (mean)

php7
ab -c 100 -n 10000 http://example.com/
Requests per second: 4232.79 [#/sec] (mean)
Time per request: 23.625 [ms] (mean)


phpinfo()
php5
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 737.53 [#/sec] (mean)
Time per request: 135.588 [ms] (mean)

php7
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 913.32 [#/sec] (mean)
Time per request: 109.491 [ms] (mean)

 

100万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 2.97 [#/sec] (mean)
Time per request: 3367.520 [ms] (mean)
一応動く

php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 34.15 [#/sec] (mean)
Time per request: 292.820 [ms] (mean)


1000万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Benchmarking example.com (be patient)...apr_poll: The timeout specified has expired (70007)
ダメ

php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 3.50 [#/sec] (mean)
Time per request: 2858.561 [ms] (mean)

 

Apache上ではphp7が2倍以上高速

 

■h2o + php-fpm

1000ループテスト
php5
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 1851.19 [#/sec] (mean)
Time per request: 54.019 [ms] (mean)

php7
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 6500.18 [#/sec] (mean)
Time per request: 15.384 [ms] (mean)

 

echoするだけのプログラム
php5
ab -c 100 -n 10000 http://example.com/
Requests per second: 5006.01 [#/sec] (mean)
Time per request: 19.976 [ms] (mean)
同時150くらいにするとエラーが出始める

php7
ab -c 100 -n 10000 http://example.com/
Requests per second: 7890.59 [#/sec] (mean)
Time per request: 12.673 [ms] (mean)

ab -c 150 -n 10000 http://example.com/
Requests per second: 9101.12 [#/sec] (mean)
Time per request: 16.481 [ms] (mean)

ab -c 160 -n 10000 http://example.com/
Requests per second: 9887.56 [#/sec] (mean)
Time per request: 16.182 [ms] (mean)

php7なら同時160でもいける。速い


phpinfo()
php5
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 894.79 [#/sec] (mean)
Time per request: 111.758 [ms] (mean)

php7

ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 1213.25 [#/sec] (mean)
Time per request: 82.423 [ms] (mean)


100万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 2.59 [#/sec] (mean)
Time per request: 3864.566 [ms] (mean)

php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 34.35 [#/sec] (mean)
Time per request: 291.094 [ms] (mean)


1000万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Benchmarking example.com (be patient)...apr_poll: The timeout specified has expired (70007)
ダメ

php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 3.54 [#/sec] (mean)
Time per request: 2825.790 [ms] (mean)
一応落ちないで動く

 

h2o(php-fpm)でもphp7の方が1.5倍程高速で且つ、Apache(mod_php)より2倍近く高速

 

■nginx + php-fpm

1000ループテスト
php5
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 1982.36 [#/sec] (mean)
Time per request: 50.445 [ms] (mean)

php7
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 6415.60 [#/sec] (mean)
Time per request: 15.587 [ms] (mean)
h2oと同じくらい

 

echoするだけのプログラム
php5
ab -c 100 -n 10000 http://example.com/
Requests per second: 5986.77 [#/sec] (mean)
Time per request: 16.703 [ms] (mean)
ちょっとチューニングしたらh2oより速い
同じく同時150くらいにするとエラーが出始める。php-fpmの所為か?

php7

ab -c 100 -n 10000 http://example.com/
Requests per second: 7491.07 [#/sec] (mean)
Time per request: 13.349 [ms] (mean)
まあまあ

ab -c 150 -n 10000 http://example.com/
Requests per second: 7939.24 [#/sec] (mean)
Time per request: 18.894 [ms] (mean)
H2oより遅い。チューニング次第か?

ab -c 160 -n 10000 http://example.com/
Requests per second: 8172.21 [#/sec] (mean)
Time per request: 19.579 [ms] (mean)

php7なら同時160でもいける。速い


phpinfo()
php5
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 982.88 [#/sec] (mean)
Time per request: 101.742 [ms] (mean)
h2oより速い

php7
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 1172.76 [#/sec] (mean)
Time per request: 85.269 [ms] (mean)


100万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 2.91 [#/sec] (mean)
Time per request: 3440.755 [ms] (mean)

php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 37.73 [#/sec] (mean)
Time per request: 265.066 [ms] (mean)
h2oと同じくらい


1000万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
apr_poll: The timeout specified has expired (70007)
ダメ

php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 3.63 [#/sec] (mean)
Time per request: 2754.137 [ms] (mean)
一応落ちないで動く h2oと同じ

 

nginx(php-fpm)でもphp7の方が高速で且つ、Apache(mod_php)より2倍近く高速

性能的にはh2oとの組み合わせと同じ (純粋にfast-cgiの性能が表面化しているだけか)

 

今回はAPI実装に使えるかを確認したいのでh2oではなく、安定したnginxを採用。

まずはsilexで単純なコントローラを作って試してみます。

silexがphp7で動作するかも検証目的になります。

 

nginx+php7+silex

結果、難なくphp7でsilexは動作しました。


datetimeオブジェクトでgetTimestamp()を返すテストコントローラ実行
ab -c 10 -n 100 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 619.37 [#/sec] (mean)
Time per request: 16.145 [ms] (mean)

ab -c 30 -n 500 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 788.53 [#/sec] (mean)
Time per request: 38.046 [ms] (mean)

ab -c 50 -n 1000 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 791.92 [#/sec] (mean)
Time per request: 63.137 [ms] (mean)

DB接続はしていないけど、色々クラスをロードしている割には速い印象

 

nginx+php5+silex

 

systemctl stop php-fpm.service
systemctl start php-fpm5

ab -c 10 -n 100 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 170.59 [#/sec] (mean)
Time per request: 58.619 [ms] (mean)

 

ab -c 50 -n 1000 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 183.43 [#/sec] (mean)
Time per request: 272.587 [ms] (mean)

 

silex上では、php5よりphp7の方が3倍以上速い

 

まとめ

php5よりphp7の方が2倍以上速い

apache+mod_phpより nginx or h2o + php-fpmの方が速い

HTTP/2の恩恵があまり無さそうなAPIサーバであれば、

nginx + php-fpm (php7) が安定していて高速。

 

とりあえずphp7はphp5よりかなり高速化されている事は分かった。

 

todo

php5.6+Phalcon vs php7+silex

※phalconはphp7未対応なので

 

 

PowerDNSの構成案

PowerDNSの構成案メモ

・ソフトウェア
PowerDNS3.4.4
MariaDB10.0.17

・PowerDNS バックエンド
gmysql NATIVEモード:MySQLレプリケーションバージョン(ZONE転送無し)
 ゾーン転送は重い&ゾーン削除が出来ないため。

・ネットワーク構成
非公開マスタサーバ(pdns+MySQLマスタ) x 1
 NSサーバとしては公開しない。DBのマスタ、ローカルからのレコード確認。
 独自UIでMySQLレコードを操作、または手動操作、またはpdnsのAPIでのレコード操作。
公開ネームサーバ(pdns+mysqlスレーブ) x 3
 NSサーバとして公開
 データはマスタDBのスレーブで自動同期

・PowerDNS設定(pdns.conf)
launch=gmysql
gmysql-host=localhost
gmysql-user=xxx
gmysql-password=xxx
gmysql-dbname=pdns
gmysql-dnssec=no

# パケットキャッシュする秒数
cache-ttl=60
# クエリキャッシュする秒数(個々のバックエンドへのクエリをキャッシュ)
query-cache-ttl=60
# ネガティブキャッシュのクエリキャッシュ秒数
negquery-cache-ttl=60
# Maximum number of milliseconds to queue a query
queue-limit=1500
# 起動するスレッド数
receiver-threads=4
#backendスレッド数
distributor-threads=4
# ロギングON
log-dns-details=yes
# backendのクエリログ出力
# バックエンドのクエリログはOFF
query-logging=no
# syslogファシリティ
logging-facility=0
# クエリログ OFF時
log-dns-queries=no
# クエリログ ON時 ONにすると1/5から1/10程度に応答性能が下がる
#log-dns-queries=yes
# ログレベル (4-9) 4,5だと実質クエリログが出ないので意味がない。6〜9はクエリログが出るが内容に差がないためloglevel=6とする。
loglevel=6


性能
キャッシュが効けば4coreで8万qps、16coreで18万qps位は出る。
キャッシュが効かないと1/5以下に落ちる。

Linux 2015/7/1 うるう秒調査

2015年7月1日の、うるう秒調査

# 2015/5/26追記
tzdata (2015d-1.el6)が更新されていました。
sudo yum update tzdata

TZ=/usr/share/zoneinfo/right/Asia/Tokyo date -d "2015-07-01 08:59:60"
2015年 7月 1日 水曜日 08:59:60 JST
OK

TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708824 second"
20150701 08:59:59
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708825 second"
20150701 08:59:60
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708826 second"
20150701 09:00:00

20150701 08:59:60が挿入されていました。

linuxカーネルが2.6.32-358.el6.x86_64より古い場合はntpdをslewモードに変更しておいた方が良さそうです。
さらに、ntpがntp-4.2.6p5-3.el6より古いとslewモードが動かないバグがあるようなので、古ければ
yum update ntp
しておきます。

ntpをslewモードへ
/etc/sysconfig/ntpd
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"
service ntpd restart

ntpを止めておくという方法でもいいようですが、男らしくslewモードを設定します。
(自己責任)

参考
うるう秒挿入に伴う NTPの動作モード(slewモード)の変更手順書(UNIVERGE PF6800 v3.0 以上 v5.1 未満)
ntp-4.2.6p5-3.el6 より前で ntpd -x が slew にならないバグがある - dechnostick's blog

# 2015/5/26追記ここまで



通常の日本のRedHat系サーバのTZ設定
#cat /etc/sysconfig/clock
ZONE="Asia/Tokyo”

#strings /etc/localtime
TZif2
TZif2
JST-9

通常のLinuxではタイムゾーンは /usr/share/zoneinfo/Asia/Tokyo
で設定してあります。

うるう秒入りのタイムゾーンの定義ファイルは /usr/share/zoneinfo/right以下に有り
東京の場合は /usr/share/zoneinfo/right/Asia/Tokyo

通常はJSTうるう秒を考慮しないタイムゾーンで設定してあります。

同時に実行すると通常のタイムゾーンうるう秒対応のタイムゾーンでは現時点で25秒ずれている事が分かります。
これまでに25秒うるう秒が挿入されているという事ですね。
#date && TZ=/usr/share/zoneinfo/right/Asia/Tokyo date
2015年 1月 31日 土曜日 22:19:12 JST
2015年 1月 31日 土曜日 22:18:47 JST

この確認時にタイムゾーンファイルが古い場合はtzdataの更新が必要です。
(ntpdを普通に起動してあれば当日に問題が出る事はない)
#yum check-update | grep tzdata
#yum update tzdata

2015/7/1のUnixtimestampを通常とうるう秒で比較
#date "+%s" -d "2015-07-01 GMT"
1435708800
#TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%s" -d "2015-07-01 GMT"
1435708825
やはり25秒ずれてますね。

#date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708799 second"
20150701 08:59:59
#date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708800 second"
20150701 09:00:00

というように'2015-07-01 08:59:60'とはなりません。

うるう秒対応だと08:59:60となるはず。
#TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708824 second"
20150701 08:59:59

#TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708825 second"
20150701 09:00:00

あれ、60秒にならない。
2015/7/1のうるう秒データはまだ無い模様。
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date -d "2012-07-01 08:59:60"
2012年 7月 1日 日曜日 08:59:60 JST
これはok
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date -d "2015-07-01 08:59:60"
date: invalid date `2015-07-01 08:59:60'
だめ


前回の2012/7/1で確認すると
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1341100823 second"
20120701 08:59:59

TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1341100824 second"
20120701 08:59:60

TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1341100825 second"
20120701 09:00:00

ちゃんと08:59:60が挿入されています。


NTPの状態
#ntpq -c rv
leap=00である事からうるう秒調整は発生していません。

そのうちNTPによりうるう秒の補正が入り
当日は1435708800が2秒つづくといった自動対応になるかと思います。
08:59:59(→ 08:59:59)→ 09:00:00

PHP(確認環境はphp5.4と5.5)だと
php > echo strtotime('2015-07-01 08:59:60');
1435708800
php > echo strtotime('2015-07-01 09:00:00');
1435708800

試しに上記のように明示的に60秒を指定すると次の0秒と同じUnixtimestampを返すようです。
(うるう秒関係無しに)

php > echo date("Y-m-d H:i:s", 1435708799);
2015-07-01 08:59:59
php > echo date("Y-m-d H:i:s", 1435708800);
2015-07-01 09:00:00
逆でも同じ



MySQL
08:59:60という表記で記録されることは無いようです。
仮に明示的に2015-07-01 08:59:60を指定してしまうと0になってしまいますが、
プログラムで明示的に08:59:60と指定してtimestampを挿入する事はありません。

mysql> select from_unixtime(1435708800), unix_timestamp('2015-07-01 08:59:60');

from_unixtime(1435708800) unix_timestamp('2015-07-01 08:59:60')
2015-07-01 09:00:00 0.000000

タイムゾーンが/usr/share/zoneinfo/Asia/Tokyoでntpd動かしていれば
所謂LAMP構成では基本問題なさそう。



参考
http://www.techscore.com/blog/2015/01/09/leap-second/
http://pocketstudio.jp/log3/2012/06/23/leaptime_2012/

OSX YosemiteのMail.app

くそ重い
Mail以外にも特に良くなったものがない。
iOS8も失敗だしiPhone6もがっかりなダサさ。
Apple好きでOS9からずっと使っていたけどスティーブがいなくなってから劣化が激しくて悲しいです。

OS X Mavericks にアップデートしたらVagrantが動かない、と思ったらvirtualboxのバージョンアップが問題だった

vagrant status
エラー発生
virtualbox 4.3.6 vagrant has detected that you have a version of virtualbox installed that is not supported.
VirtualBox4.2までしか対応していないらしい

VBoxManage --version
4.3.6r91406

いつの間にかvirtualboxをバージョンアップしていたようだ

vagrant --version
Vagrant version 1.0.7
古い

vagrantをアップデートして対応
gemだと最新が無い
vagrantのサイトで最新版を持ってくる
http://www.vagrantup.com/downloads.html
v.1.4.3のosXパッケージをインストール

vagrant --version
Vagrant 1.4.3

OK

消費税の切り替え(特例措置)

とある月額制携帯公式サイト(まだやってる)
古いサイトなもんで月額表示がいろんなところにハードコードされていてカオス状態。
価格の表示に関する特例措置に対応するため、対象箇所を検索。

find . -regex '.*html' -type f | xargs grep 315 -l
3キャリア用にいっぱい出てくる

月額315円(税込)
月額315円(税込み)
月額315円
会員登録(315円)
315円(消費税込)
(月額315円・税込)
315円(消費税込)

HTMLにハードコードされている部分。
他は動的に置換されているようだが。
ふむふむ。

sedで一発置換と行きたいところだが
for i in `find . -regex '.*html' -type f | xargs grep 315 -l`;do sed "s/315/300/g" $i;done;

そう簡単じゃなくて、
特例措置的に
300円(税別)
としたいところ。

-eで繋げるにしても順番が重要
月額315円(税込み)
月額315円(税込)
会員登録(315円)
315円(消費税込)
315円(消費税込)
(月額315円・税込)
月額315円

for i in `find . -regex '.*html' -type f | xargs grep 315 -l`;do sed -e "s/月額315円(税込み)/300円(税別)/g" -e "s/月額315円(税込)/300円(税別)/g" -e "s/会員登録(315円)/会員登録(300円・税別)/g" -e "s/315円(消費税込)/300円(税別)/g" -e "s/315円(消費税込)/月額300円(税別)/g" -e "s/(月額315円・税込)/(月額300円・税別)/g" -e "s/月額315円/月額300円(税別)/g" $i > tmp/{$i}2;done;

めんどくさ

あ、間違えた(汗)
戻す
for i in `find . -type f -regex ".*html.save"`;do mv $i ${i%.save};done

月額って消しちゃだめ
for i in `find . -regex '.*html' -type f | xargs grep 315 -l`;do sed -e "s/月額315円(税込み)/月額300円(税別)/g" -e "s/月額315円(税込)/月額300円(税別)/g" -e "s/会員登録(315円)/会員登録(300円・税別)/g" -e "s/315円(消費税込)/300円(税別)/g" -e "s/315円(消費税込)/月額300円(税別)/g" -e "s/(月額315円・税込)/(月額300円・税別)/g" -e "s/月額315円/月額300円(税別)/g" $i > $i.tmp; cp $i $i.save; mv $i.tmp $i;done;


あとはコンビニ支払いとかクレジットカード系の個別決済。
これは4/1に自動きりかえが必要だったり、売り上げファイル立てる5月に切り替えが必要だったりと割と大変。