Ruby5 Episode #384 - July 9, 2013
Ruby5 - Episode #384 - July 9, 2013
Decluttering lib, Puma vs. Passenger, Exception Notification 4.0, Ettu and ETags, Octopus 0.6.0, The self-pipe trick
今回は7分ある。長い感じする。 早くも日本語訳がんばるのあきらめてます。もっと適役いるはず(´・ω・`)
Declutter Lib
Kuba Suderが、彼自身の経験をもとにどうやって散らかったlibディレクトリを綺麗に整理するかかいたブログ記事について。
Declutter your lib directory | Lunar Logic Blog
今のプロジェクトのlibフォルダの中みたらどれぐらいの違う種類のファイルが詰まってる? 「そんなんわかんないよ」「しょうがないよね」
Railsはmodel/view/controllerのための良さげなディレクトリ構造を作ってくれるよね、最近だとassetsとか。
ただRailsが作ってくれるフォルダに収まらないのは全部libいきになっちゃうよね。
Kuba Suderが、自身がlibを綺麗にした経験をもとに、libフォルダの整理方法についてブログ記事をかいた。
いいね、それで僕はどうやったらlibを綺麗にできるんだ?
彼によればappに関係あるすべてものは、libにおかずにapp以下におくべきだ。
なるほど、decoratorとかpresenterとかサービスオブジェクトとかバックグラウンドジョブとか、app以下のサブフォルダにおくってことだね?
そうだ。あと他のクラスにmixinするモジュールはapp/models/concerns、app/models/controllersにいれよう。
おっけ、で、libに置いとくべきなのはどんなファイル?
libに置くべきなのは他のプロジェクトでも再利用出来るような一般的なものだけだ。 例えば外部Webサービスのインターフェイスとか、データベースツールとか、Rubyのコアクラスを拡張するようなものとか、gemとして切り出せるようなものとか。
詳しくはブログをチェックしてね、libを綺麗にするためのベーシックガイドラインがのってるよ。
Puma vs. Passenger
Phusion Passengerのひとが書いたPumaとPassengerの比較記事について。 いくつかの見方、並行性とか、開発モデルとか、CPUバウンド/IOバウンドなアプリでのパフォマンスとか、メモリの使用量とか、管理ツールとか、GCとかデバッグとかフォールトトレランスとか、リソースのコントロールほうとかドキュメントとランタイムサポートとか。
Puma vs Phusion Passenger · FooBarWidget/passenger Wiki
Exception Notification 4.0
Sebastian MartinezがException Notification gemのバージョン4.0をリリースした話。
Rack・Railsアプリで、email/campfireとかで通知してくれるgemだよね?何が変わったの?
バグフィックス、Sidekiqとresqueのサポート、通知エラーのよりよよいログとり、Rails 4との互換性。
いいね! (Rails 4のことクアトロいうと聞き取りづらい)
Email/Campfire/webhook通知出来るようになった。 カスタム通知が作れるようになった。 configuration apiもかわったよ。 詳しくはプロジェクトのドキュメントを見てね。
Ettu generates smarter ETags
Etagsの話、難しいので訳スルー(´・ω・`)
CloudSpaceのひとが出したgem。
デプロイしたあとも、古いHTML/CSS/JavaScriptが表示され続けてる問題を解決するやつっぽい。
コントローラで、レコードをキーにして、fresh_when
使ってる場合レコード更新しないとEtagsも更新されないので、HTML/CSS/JavaScriptが更新されてるけど、fresh_when
に渡してるレコード自体のキーは更新されてないから、Etagsも更新されなくて、Etagsが更新されないからページの内容も変更がないとみなされて、古いページがそのまま表示されちゃうっていう問題があるみたい。
Ettuつかうと、viewとかassetsの変更も考慮してETags生成してくれるっぽい。 使いかたはGemfileに追加してあとはふつーにfresh_when使えばいいみたい。超絶便利...
Et tu, Rails? | Cloudspace | Blog
Octopus 0.6.0 was released
タコうまいよね。そっちのオクトパスの話じゃないよ(w)
Octopus 0.6.0 · tchandy/octopus
ActiveRecordでデータベースのシャーディングを可能にするOctopusのバージョン0.6.0が出た。
(複数のデータベースを1つのアプリで使いたいとき?ほにゃらら?聞き取れなかった)
データベースのシャーディングを実装するプロジェクトいくつかあるよね db-charmerとかdata_fabricとかmulti_dbとか、それぞれのプロジェクトで制限はある。 Octopusのメインゴールはシャーディングするためのよりよい方法を提供することだ。
新しいバージョンは、リファクタリングされてクリーンナップされ、Octopus::Loggerが取り除かれ、MySQLじゃなくてMySQL2でテストするようになった、一番重要なのはRails 2のサポートをやめたこと。 もしRails 2が必要なら、Octopusの0.5の最新版が使えるよ。 0.6はRails 3のサポートのみで、まだリリースされてないけど0.7ではRails 4をサポートする予定。
詳細はプロジェクト参照してね。
The self-pipe trick
Unixシグナルうけとったとき、どうそれを処理するかの話っぽいけど難しいから訳スルー