k0kubun's blog

railsへの執着はもはや煩悩の域であり、開発者一同は瞑想したほうがいいと思います。

Rails

RailsでN+1 countクエリを潰すactiverecord-precountを作った

N+1 countクエリを最大11.7倍速くできるactiverecord-precountというgemを作った。 *1 k0kubun/activerecord-precount N+1 countクエリ Tweet.all.each do |tweet| p tweet.favorites.count end # SELECT `tweets`.* FROM `tweets` # SELECT COUNT(*) FROM `…

Railsでデバイスの判定をするのに便利なgemを作った

rack-user_agent を作った rack-user_agentという、User-Agentに応じていろいろな判定ができるメソッドを生やすRack::Request拡張を作った。 tagomorisさんのWootheeを使ってRack middlewareでUser-Agentをパースしておいて、 その結果に応じてrequestから簡…

Rack applicationのプロファイリングにはrack-lineprofが便利

RubyKaigi 2014行った。良い発表がいろいろ聞けたんだけど、最近ISUCONに向けてwebアプリのチューニングに興味があったので特にfinal keynoteが興味深かった。 その中で紹介されていたtmm1/rblineprofが行ごとの実行時間を表示してくれるのでとても便利そう…

ActiveRecordでN+1 countクエリを潰す方法、あるいはactiverecord-count_loaderの使い方

追記:activerecord-count_loaderはactiverecord-precountに変わりました。使い方はこちら。 ActiveRecordでassociationを読むためにN+1クエリが出てしまった場合、 includesなどのメソッドを利用することで発行されるクエリの数を減らすことができる。*1 と…

デザインテンプレートをgem化してRailsで使う

WrapBootstrapというbootstarpベースの有料デザインテンプレートを配布してるところがあって、 それをrailsで使おうとしたらasset pipelineで割りとハマったのでそのメモ。 速習Asset Pipeline 本当はRails Guides読んだほうがいい アセットを参照するとき a…

ssh port forwarding

サーバー管理用のrailsアプリ作ってて、セキュアに自分だけそれを見る方法がないか探してたらちょうど良い方法があった。 ssh port forwarding ssh foo@barで接続できるサーバーでlocalhost:3000にrailsアプリをデプロイしているとする。 まず以下のようなコ…

Railsでカスタムmarkdownを実装する

Railsでブログ実装したくなることないですか? その際に記法の選択肢の一つにmarkdownが出てくると思います。 redcarpetを使うと簡単にmarkdownを実装できるので、その方法をまとめました。 Redcarpetでmarkdownを実装する Gemfileにredcarpetを追加 gem 're…

Railsの静的ファイルをnginxでルーティングする

railsアプリに使ってるドメイン内で静的ファイルを公開したくなったので調べた。 serve_static_assets config.serve_static_assetsがtrueになっていると、public以下のファイルにアクセス可能になる。 しかし、速度の問題で静的ファイルはwebサーバーに処理…