DBIC_TRACE=1のときに発行されるsqlにどこで発行されたクエリか追記する
package DBIx::Class::Storage::Statistics::Caller; use strict; use warnings; use base qw/ DBIx::Class::Storage::Statistics /; sub query_start { my ($self, $string, @bind) = @_; my $caller_sub_name = $self->_get_non_dbic_caller; my $message = "[$caller_sub_name] $string: ".join(', ', @bind)."\n"; if(defined($self->callback)) { $string =~ m/^(\w+)/; $self->callback->($1, $message); return; } $self->print($message); } sub _get_non_dbic_caller { my ($self) = @_; my $get_sub_name = sub { for my $n ( 0..20 ) { my ($package, $filename, $line, $subroutine, $hasargs, $wantarray, $evaltext, $is_require, $hints, $bitmask) = caller($n); return $subroutine if $subroutine =~ s{^AppName::}{}; }; return ''; }; return $get_sub_name->(); } 1;
使いたいときに
$schema->storage->debugobj( DBIx::Class::Storage::Statistics::Caller->new );
する。
callerをとってくる部分はもっとうまくかけるにおいがぷんぷんする。
あと、上のやつとは全然関係ないけど、最近Arkアプリの起動は
perl boot_app_server_fcgi.pl >> ~/tmp/app/fcgi.log 2>&1 >> /dev/stdin 2>&1 | grep SELECT >> ~/tmp/app/fcgi-select.log
みたいに起動して、
M-x tail-log-file ~/tmp/app/fcgi.log してる。
してる。
zshとかきちんと理解してないので勘で書いて、あ、動いた。みたいな感じ。
Emacsでlogを見るようにすると、anything-c-moccur とか使えて便利な事がおおい。
あと、sqlとかそのまま実行できて、それもたのしい。
tail-log-fileの定義は以下のような感じ
(defun tail-log-file (file) (interactive "f") (let* ((log-file (expand-file-name file)) (buffer-name (concat "*" log-file "*"))) (with-current-buffer (get-buffer-create buffer-name) (set-buffer buffer-name) (setq auto-window-vscroll t) (fundamental-mode) (start-process "tail" buffer-name "tail" "-f" log-file) ) (switch-to-buffer buffer-name)))
rails.elを参考にしました。
今日は、海の家でタイ料理を食べながらおビールを飲みました。
ですが、気温が高かったからか、僕のビールがすぐに蒸発してしまう不思議な現象に見舞われたため、沢山ビールを注文することになってしまいました。
不思議でしたが、楽しいお酒が沢山飲めて本当に幸せでした。しあわせ、しあわせ。