More Related Content
PDF
MariaDBとMroongaで作る全言語対応超高速全文検索システム PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話 PDF
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2 PDF
なかったらINSERTしたいし、あるならロック取りたいやん? PDF
Web エンジニアが postgre sql を選ぶ 3 つの理由 PDF
【Dialogflow cx】はじめてみよう google cloud dialogflow cx 編 PDF
Layer Normalization@NIPS+読み会・関西 PPTX
設計と実装で 抑えておきたい サービスクラスと例外 What's hot
PDF
[DL輪読会]Model soups: averaging weights of multiple fine-tuned models improves ... PDF
強いて言えば「集約どう実装するのかな、を考える」な話 PDF
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스 PDF
PDF
ECCV2020 オーラル論文完全読破 (2/2) PDF
PDF
PDF
High-impact Papers in Computer Vision: 歴史を変えた/トレンドを創る論文 PPTX
Vitess VReplication: Standing on the Shoulders of a MySQL Giant PDF
PDF
【DL輪読会】Code as Policies: Language Model Programs for Embodied Control PDF
PPTX
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門 PDF
PDF
トピックモデルの評価指標 Perplexity とは何なのか? PDF
PDF
コンピュータビジョン分野メジャー国際会議 Award までの道のり PPTX
『モビリティ・インテリジェンス』の社会実装 [DeNA TechCon 2019] PPTX
PILCO - 第一回高橋研究室モデルベース強化学習勉強会 PPTX
Viewers also liked
KEY
PDF
PPTX
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー) PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~ PDF
PDF
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介 PDF
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ… ODP
高トラフィックサイトをRailsで構築するためのTips基礎編 PDF
PDF
PDF
PDF
Rubyの会社でPythonistaが三ヶ月生き延びた話 PDF
PPTX
KEY
PDF
ドリコム流。教育アプリにおけるゲーミフィケーションノウハウ PDF
PDF
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜 PDF
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録” KEY
Similar to 実録!Railsのはまりポイント10選
PDF
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か? PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編 PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み PDF
PPTX
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~ PDF
Rubyの会社でPythonistaが3ヶ月生き延びた話 PDF
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015 PDF
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡 PDF
Hyper → Highspeed → Development PDF
20080521-Ruby-on-Rails-Security PDF
Rubyプログラミング教育に対する取り組みと事例紹介 PDF
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化 PDF
PDF
nomlab_okayamaruby_subslide PDF
PDF
2012 08-23 Mame Night Jenkins KEY
PDF
PDF
Tokyo Rubykaigi 01 t-wada More from Drecom Co., Ltd.
PPTX
DApps のユーザ認証に web3.eth.personal.sign を使おう! PDF
コンテナで始める柔軟な AWS Lambda 生活 PDF
PDF
PDF
PDF
PPTX
PPTX
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法 PDF
PDF
PDF
PPTX
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介 PDF
PDF
PDF
rails-developers-meetup-day4 PPTX
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ PDF
html5conf2018-sponsor-session 実録!Railsのはまりポイント10選
- 1.
- 2.
自己紹介
• 藤田 武雄
•株式会社ドリコム
• ソーシャルゲーム事業本部
• アプリケーションエンジニア
• 最近は主に社内ライブラリの開発を
担当
Copyright © Drecom Co., Ltd.
- 3.
- 4.
- 5.
はまり例
a = bor c
• こういう意味にしたかった
a = (b or c)
• 実際の動きは
(a = b) or c
• bの値をaに代入し、それが偽であればc
を評価する
Copyright © Drecom Co., Ltd.
- 6.
- 7.
ちなみにRails本体は
• Contributing toRuby on Rails
• 5.3 Follow the Coding Conventionsに
は
• Prefer &&/¦¦ over and/or
• と書かれている
• http://guides.rubyonrails.org/
contributing_to_ruby_on_rails.html
Copyright © Drecom Co., Ltd.
- 8.
- 9.
- 10.
- 11.
lambdaを渡す
scope :started, lambda{ where('start_at
<= ?', Time.now) }
• lambdaの中身は都度評価される
• edgeではwhereを直接書くやり方は
deprecatedとなった
• https://github.com/rails/rails/commit/
0a12a5f8169685915cbb7bf4d0a7bb48
2f7f2fd2
Copyright © Drecom Co., Ltd.
- 12.
- 13.
- 14.
よくない例
class Baz
defself.foo
@foo ||= bar
end
end
• barがDBから取得した値だとDBを更新
しても返り値が変化しない!
Copyright © Drecom Co., Ltd.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
対策
• その1: validates_length_ofを設定
•その2: 文字数を減らす
• その3: mediumtext(16MBまで)などに
変更する
• どれぐらい増えるか見積もりしておけば
はみ出ないように設計見直しできるはず
• AR::Store(YAML)にも気をつけよう
Copyright © Drecom Co., Ltd.
- 22.
- 23.
- 24.
- 25.
パッチ
module ActiveRecord
moduleConnectionAdapters
module SchemaStatements
def index_name(table_name, options)
if Hash === options
if options[:column]
"#{Array.wrap(options[:column]) * '_and_'}"
elsif options[:name]
options[:name]
else
raise ArgumentError, "You must specify the index name"
end
else
index_name(table_name, :column => options)
end
end
end
end
end
Copyright © Drecom Co., Ltd.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
コード例
CREATE TABLE IFNOT EXISTS
tmp_scores LIKE scores;
TRUNCATE TABLE tmp_scores;
class TmpScore < ActiveRecord::Base; end
TmpScore.import([:user_id, :value, :rank],
scores)
RENAME TABLE scores TO scores_old,
tmp_scores TO scores;
DROP TABLE scores_old;
Copyright © Drecom Co., Ltd.
- 38.
- 39.
- 40.
- 41.
double submit protection
•二重送信を検知してくれるplugin
• 二重送信を防ぎたいフォーム(orリンク)
のあるページでsessionにtokenを保存
し、パラメータにも同じ物をつける
• 次のページでは両者を付きあわせて、
session内のtokenを無効にする
Copyright © Drecom Co., Ltd.
- 42.
- 43.
処理の流れ
user app session memcache
request load
write
ココが問題
response write
Copyright © Drecom Co., Ltd.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.