2012-01-01から1年間の記事一覧

エンジニアサポートCROSS 2013に登壇します

2013年1月18日(金)に開催される、エンジニアサポートCROSS 2013 に登壇します。 「継続的システム運用のゲンバのハナシ」という @netmarkjp さんがオーナーを務めるセッションで、 @kuwa_tw さん、 @kazeburo さん、 @tnmt さんとともにディスカッションし…

不要なメルマガ広告はspamフォルダではなく配信拒否(オプトアウト)しましょう

一般にspamと呼ばれる電子メールには2種類あります。オプトイン(配信承諾)して受け取ったメールと、オプトインしてないのに届いたメールです。 この記事は、インターネット全体の利益を考えるなら、オプトインして受け取ったメール広告を迷惑に感じたら、s…

Passenger 4.0 beta1 の新機能解説

先日、 Phusion Passenger 4.0 beta 1 が公開されました。 近年は Passenger に代わり Nginx + unicorn の構成が Rails の業界標準になりつつありますが、Passenger 4 は大きく進化したようなので、そのアップデート内容を紹介します。 なお、この記事は 10/…

Rails3.2からログの行が他プロセスのものと混ざるようになった件について

Rails 3.2.0 から、マルチプロセス環境下(Unicornなど)では、 Rails.logger によるロギングが、以下のように複数のリクエスト同士で「混ざる」ようになってしまいました。 Started GET "/search?q=blip" for 0.0.0.0 at 2012-03-12 02:20:18 -0700 Process…

JPEGのフレームヘッダを読んでwidthとheightを取り出す

突然ですが、JPEG の構造はだいたい下記のような感じになってます。 今回は libjpeg 等のライブラリを使わずに、JPEGファイルから画像の width と height を取り出したいと思います。この width と height の情報は、上図におけるフレームヘッダセグメントに…

Unicornを同期的に再起動する

Unicornの再起動はシグナル(USR2等)を発行することで非同期的に行われるので、成功したのか失敗したのかがわかりづらい。 例えばCapistrano等でアプリケーションをデプロイしたあと、Unicornの再起動を行い、その再起動が成功か失敗かを判断したいことがあ…

WEB+DB PRESS vol.70に「実践Rails高速化」を寄稿しました

技術評論社の紹介ページ: http://gihyo.jp/magazine/wdpress/archive/2012/vol70WEB+DB PRESS vol.70 に「実践Rails高速化」という特集記事を寄稿しました。記事は40ページで、内容はこんな感じです。 第1章 Rails は遅いのか イントロです。 第2章 遅いコ…

はてなブログに移行しました(旧題「床のトルストイ、ゲイとするとのこと」)

「床のトルストイ、ゲイとするとのこと」という回文のタイトルで2006年からはてなダイアリーをやってきましたが、この度はてなブログに移行し、タイトルも「昼メシ物語」に改めました。はてなブログのインポート機能は、はてダについていたはてなブックマー…

複数のリモートホストで並列にコマンドを実行して結果をファイルでダウンロードするやつ書いた

コード(rop.rb) 使い方 まずリモートで実行したいスクリプトを用意します。例えばログファイルのgrepとかです。 $ cat script.txt grep hoge /var/log/nginx/access.log で、例のやつを実行します。 $ ruby rop.rb -H 'app-0{01..05}' -f script.txt そう…

Arproxyを使ったreadonlyなrails console

Rails console、リードオンリーモードがほしい2012-05-01 10:24:04 via YoruFukurou というわけでArproxyを使って実装してみました。 (mysql2 の部分は使っているアダプタに書き換えてください) これを script/ 以下等に置けば、rails console と同様に使…

ActiveRecordが発行するSQLをフックして色々やるためのライブラリArproxyを公開しました

https://github.com/cookpad/arproxy http://rubygems.org/gems/arproxy これは何? Arproxyを使うと、ActiveRecordが発行したSQLがDB Adapterによって実行される直前をフックすることができます。これによって、カスタマイズしたクエリログを出力したり、ど…

Railsで遅いMiddlewareを探す

AさんはRailsで書かれたある遅いコードの検証をしていました。 X-Runtimeヘッダを見ると $ curl -Is localhost:3000/hello | grep X-Runtime X-Runtime: 5.008580 5秒もかかってる。 しかしRailsのログを見ると Started HEAD "/hello" for 127.0.0.1 at Tue …

capistranoで今タスクを実行中のホスト名を取得する

問題 $ cap hoge ROLES=app HOSTS=app-01,app-02,app-03 としたときに、各ホストに、ホスト名をファイル名にしたファイルをtouchするようなタスク hoge を記述せよ。ただし、/etc/hostnameを参照してはならない。 こたえ task :hoge do run "touch $CAPISTRA…

ActionView::Templateのcompile済み中間コードをキャッシュする

まずRailsのviewについて説明する。Railsのviewはerbとかhamlとかで書く。この人間が書いたviewファイルはtemplateと呼ばれ、ActionView::Templateクラスで扱われる。一つのviewファイルが一つのTemplateオブジェクトになる。 このTemplateクラスはTemplate#…

unicornのタイムアウト時にもRailsのログをちゃんと出力させる

unicornはconfで timeout 20 とかやっとくと、20秒以上かかったらそのworkerが殺される。それはいい。問題はその殺され方にあって、タイムアウトしたunicorn workerはmasterにKILLシグナルで強制的に殺される。KILLで殺されてしまうと、worker側でtrapして安…

bundlerでgithub上のunicornを強引に入れる

みんな、unicornをカスタマイズして使う時は、オフィシャルのgithubリポジトリ(defunkt/unicorn)からforkしていじると思う。 そしたらそれを↓こんな感じにbundlerから入れてみたいと思うのが人情 gem 'unicorn', :git => 'git://github.com/mirakui/unicor…

rails runner的なことをrails runnerを介さずに直接やる

rails runner コマンドを使うと、各modelsとか、config.autoload_pathsに指定したファイルとかをロードした上でスクリプトを実行できる。 $ rails runner hoge.rb ただ、毎回 rails runner とか書くのはだるいので、hoge.rbを独立したスクリプトにしちゃいた…

プログラマと爪の手入れ

一日中キーボードを叩く仕事なので、爪の手入れには気を使っています。ちょっとでも爪が伸びてると指先が気持ち悪くて良いコード書けない気がしてきますね。最近ガラスの爪やすりを買ったんですが、すごくいいっすこれ。それまで爪切りについてるヤスリを使…