% git log -1 sql/myapp.sql
を見てコミットハッシュを見てそれをバージョンとしてDBに保存する% git show {commit-hash}:sql/myapp.sql
で復元可能バージョニングテーブル
CREATE TABLE git_ddl_version (
`version` VARCHAR(40) NOT NULL, -- commit hash
`upgraded_at` VARCHAR(20) NOT NULL UNIQUE,
`sql_text` TEXT
);
a <-> b <-> c ブランチを行き来しながら適切に差分SQLを当て込むことができる。
コマンドラインツール
Partitioningはdailyバッチで切ってるので、その部分まではバージョン管理してない
script 2>&1 | $LOGGER
とかやってもいいけど、コマンドの成否がわかりづらい> /dev/null 2>&1
する人が続出https://github.com/kazuho/kaztools/blob/master/cronlog
cronlogからかなりコピペなので安心してお使いいただけます
LOGGER="/usr/local/bin/fluent-agent-lite -f msg"
RUN="/home/app/project/env.sh runcron -- "
* * * * * $RUN command ... 2>&1 | $LOGGER cron.cmd - fluentd-srv
http://blog.riywo.com/2012/05/26/005232
環境変数一式設定してから、プロジェクトディレクトリにcdするラッパーシェル。
#!/bin/sh
export USER=app
export HOME=/home/$USER
export PATH="extlib/bin:local/bin:/opt/perl-5.16/bin:$PATH"
export PERL5OPT="-Mlib=lib,extlib/lib/perl5,local/lib/perl5"
export PLACK_ENV=production
cd $(dirname $0)
exec "$@"
実行ディレクトリに配置して、Reporter情報を登録する。
timestamp: 1
reporter: None
error_reporter:
- +MyApp::Reporter::Alert
common_reporter:
- Fluentd
- File
- file: log/cron%Y-%m-%d.log
- +MyApp::Reporter::IRC
-c
で別のYAMLを食わせることも可能。runcron
自体にも色々オプションがあるのでドキュメントを御覧ください。Perlだけど非常に簡単。newメソッドと$runcronオブジェクトを受け取るrunメソッドの2つが定義されていればOK。
package App::RunCron::Reporter::Stdout;
use strict;
use warnings;
use utf8;
use parent 'App::RunCron::Reporter';
sub run {
my ($self, $runner) = @_;
print STDOUT $runner->report;
}
% cat my-runcron
#!perl
use strict;
use warnings;
use App::RunCron;
my $runner = App::RunCron->new(
timestamp => 1,
command => [@ARGV],
logfile => 'tmp/log%Y-%m-%d.log',
reporter => 'Stdout',
error_reporter => [
'Stdout',
'File', {
file => 'tmp/error%Y-%m-%d.log'
},
],
);
$runner->run;