Upgrade to Pro — share decks privately, control downloads, hide ads and more …

とあるプロジェクトでコードを書き始めた僕がつまづいた石たち

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for zaru zaru
April 05, 2019

 とあるプロジェクトでコードを書き始めた僕がつまづいた石たち

Avatar for zaru

zaru

April 05, 2019
Tweet

More Decks by zaru

Other Decks in Technology

Transcript

  1. まさかの find を override していた def find id any_of({_id: id},

    {name: id}).first end id もしくは name どちらでもヒットする 気持ちはわかるけど検索キーはどちらかに統一したほうが良い なぜならアプリケーション全体で id と name どちらで持ち回るのか が曖昧になる。ここで透過的に処理するのではなく、もう少し手前 で透過的な処理をしたほうが良い 例外出すと信じてたのに…
  2. 特定ドキュメントの場合、とにかく遅い 大量にある embeds_many が原因 ferret One サービスサイトだと 5MB 以上ある fetch

    するのに 200-300msec くらいかかってた Site.without(:hoge) や Site.only(:piyo) でスリムに 20-30msec くらいに改善 embeds_many -> has_many にしたい
  3. mongoid の仕様で一部のフィールドのみを取得した場合は save でき ない set で直接書き換えるしかない… site = Site.without(:hoge).first

    site.title = 'update' site.save # NG site.set(title: 'update') # OK これは今後しんどくなりそうな雰囲気を感じている ActiveRecord ってどうだったっけ… ?
  4. これ自体はなんてことはない普通のコード rest-client という gem を使っている ただし Gem le には rest-client

    は存在しない mailjet というメール配信の gem が rest-client に依存 それを利用している… しかし mailjet はもう使っていないので gem を削除すると死ぬ そして faraday という別の HTTP クライアント gem がありバッティ ングしている
  5. Site has_many Page TemporaryPage extends Page temporary_page.site #=> <Site ....>

    temporary_page.site_id #=> nil リレーションしているのだからあるはずでは… ? def site で定義されていた… def site self.public_page.try(:site) end