2017-03-01から1ヶ月間の記事一覧
Highlineのソースを読んでいたら以下の部分でちょっと考えてしまった。 if template_or_question.is_a? Question template_or_question else Question.new(template_or_question, answer_type, &details) end 悩んだのはtemplate_or_question.is_a? Question…
最近deviseを使う事があったのだが、メールアドレスのバリデーションがどうなっているのか気になっったので調べてみた。 devise/devise_test.rb at master · plataformatec/devise · GitHub メールアドレスのバリデーションテストは上記で行っている。 で、…
railsのhas_many throughの使い方が分からなかったという話。 モデルの関連付けでhas_manyは分かりやすい。1対多のモデルは1側にhas_manyをつければいい。 問題はhas_many throughでこれが良く分からない。多対多の時につけるというが多対多の場合、リレーシ…
CHAPTER10 Building for Failure 発生した障害は素早く復旧される事と、黙って失敗しない事が大事 AntiPattern: Continual Catastrophe 前段の処理が失敗しているのにも関わらず、それをキャッチ出来ずに後続処理が動いてしまうのはよくない。 Solution: Fai…
AntiPattern: Wet Validations DBによってはvalidationで指定された制約をサポートしていない場合がある。その場合、DB上で発生する不整合データを検知出来ない可能性がある。 Solution: Eschew Constraints in the Database ★適切なgemを使うことで上記を回…
Solution: Never Use External Code in a Migration migrationをする際にDB上のデータを一緒に変更する事はよくある事だが、upメソッド内にrubyでその手順を直接書くべきではない 理由はパフォーマンスと、DBから見た外部依存性がrails側にできてしまう為で…
Chapter 9 Databases railsはORMマッパーによって、DBの事を意識せずに済むように設計されているが、それでも気にしなければいけない点はある AntiPattern: Messy Migrations railsはmigrationによってDBへ直接変更を加えなくてもよくなっているが、時間が立…
Solution: Move Processing into Background Jobs 処理時間がwebでの応答に不適切なくらい掛かる場合はcronやキューイングといった。バックグラウンドJobの仕組みを検討した方がいい cronの場合スクリプトを別に作ってそれを動かす。 例えば、テーブルのカウ…
忙し過ぎて時間が空いてしまった。 CHAPTER 8 Scaling and Deploying AntiPattern: Painful Performance 単純なパフォーマンスの問題を防ぐ為の事例を紹介する。 Solution: Don’t Do in Ruby What You Can Do in SQL RubyでSQLで出来る事をやらせないように…