有頂天Ruby

ビールを飲みながらRubyについて書きます。

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もかわったよ。 詳しくはプロジェクトのドキュメントを見てね。

Exception notification

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シグナルうけとったとき、どうそれを処理するかの話っぽいけど難しいから訳スルー

RubySource | The Self-Pipe Trick ExplainedRubySource