"ActiveRecordの力でDBのメタデータを迅速に解析する" Reject on Rails 2024 での登壇資料です。 https://gotanda-rb.connpass.com/event/330965/ 実装したgemはこちら https://github.com/ln…
モデルについて 説明 モデルとはアプリケーションが扱うデータや処理を表現する仕組みのこと モデル名とテーブル名の規約 英大文字から始まる 英数字のみ 単語の区切りでは、先頭文字を大文字 単数形の名詞 Entry UserComment ファイルはapp/modelsディレクトリに格納 ファイル名は、モデル名の単語区切りを「_」にし、すべて小文字にしたもの app/models/entry.rb app/models/user_comment.rb 命名規則 種類 説明 例
Deprecatedにした経緯というか背景が伝わってるのかどうかアレだと思ったので、ここに日本語にて書き記しておく。 Deprecate mismatched collation comparison for uniquness validator by kamipo · Pull Request #35350 · rails/rails · GitHub Active Recordのuniqueness validatorはデフォルトでcase sensitiveな比較をするんですが、これが、文字列のデフォルトのcollationがcase insensitiveなMySQLと相性が悪く、DB上のUNIQUE制約と一致しない振る舞いだったりINDEXが効率よく使えずDBが死ぬみたいな問題を引き起こしていました。 例: 本当にあったRailsの怖い話 僕も主に仕事のコードレビューで過去に何
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Essential RubyOnRails patterns — part 2: Query Objects 公開日: 2017/09/18 著者: Błażej Kosmowski サイト: selleo.com 2017/10/25: 初版公開 2022/03/24: 更新 前回: Railsで重要なパターンpart1: Service Object Query Object(または単にQuery)パターンもまた、Ruby on Rails開発者が肥大化したActiveRecordモデルを分割し、コントローラをスリムで読みやすくするのに非常に有用なパターンです。本記事はRuby on Railsを念頭に置いていますが、このパターンは他のフレームワーク(特にMVCベースでActiveRecordパターンを適用できるもの)にも簡単
更新情報: 2013/11/19: 初版公開 2021/01/08: 訳文見直し、追記 こんにちは、hachi8833です。今回は、自分が知りたかった、Active Recordモデルのリファクタリングに関する記事を翻訳いたしました。1年前の記事なのでRails 3が前提ですが、Rails 4以降でも基本的には変わらないと思います。リンクは可能なものについては日本語のものに置き換えています。 なお、ここでご紹介したオブジェクトは、app以下にそれぞれ以下のようにフォルダを追加してそこに配置します。 注記: 以下は使われそうなフォルダを列挙しただけであり、実際にはこの一部しか使いません。 Value Object Service Object Form Object Query Object View Object Policy Object Decorator ⚓ 肥大化したActive
“When does ActiveRecord execute queries? No one knows!” ActiveRecord is great. Really, it is. But it’s an abstraction, intended to insulate you from the actual SQL queries being run on your database. And, if you don’t understand how ActiveRecord works, you may be causing SQL queries to run that you didn’t intend to. Unfortunately, the performance costs of many features of ActiveRecord means we can
2018.08.13 週刊Railsウォッチ(20180813)Rails 5.2.1リリース、sanitize_sql_arrayは5.2からpublicだった、Dev.toがRailsアプリのソースを公開ほか こんにちは、hachi8833です。自宅のエアコンの室内機からジャージャー水漏れしたのでこいつ↓でドレーンパイプを吸ったらコガネムシの破片が転がり出てきました🐞。 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを社内有志でつっついたときの会話です👄 ⚓Rails: 先週の改修(Rails公式ニュースより) Rails 5.2.1が8/7に正式にリリースされました🎉🎉。 早速記念写真。 その後のコミットを見ると、Railsガイドの修正が目立ちます。 なお、References
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: To join or not to join? An act of #includes 原文 公開日: 2017/08/07 著者: Tiago Farias 原文ではシェークスピアの古典劇『ハムレット』のセリフが多数引用されています。引用されたセリフのリンクをマウスオーバーするとシェークスピアの原文がポップアップします。 actの基本的な意味は「演技(する)」「(舞台の)場面」であり、タイトルはこれにかかっています。 2017/09/25: 初版公開 2021/09/22: 更新 訳注 k0kubunさんの以下の記事も合わせて読むことをおすすめします。Rails 5以降は#left_outer_joins(またはエイリアスの#left_joins)が使えます。また、#includesがActiveRecord::Baseを生成す
前提知識 Rails アプリにおいて、テーブルの追加やカラムの追加は簡単なものの、カラムの削除やリネームは慎重に行う必要がある。たとえアプリからそのカラムを参照してないとしても、いきなりカラムを削除するとエラーになる可能性が大いにある。 というのも Rails にはスキーマキャッシュというものがあり、テーブルのカラム情報をモデルがキャッシュしているからだ。このキャッシュはたとえばいわゆる N+1 クエリ問題を避けるために includes (eager_load) するときに参照される。 SELECT 句で t0_r0 のような機械的に別名が振られるようなクエリを見たことがある Rails エンジニアは多いと思う。 機械的に全カラムを取得するためにスキーマキャッシュを利用しているため、このようなクエリが実行されてる中でカラムを削除したりリネームしたりすると、スキーマキャッシュをもとに並べら
So in my never-ending quest to remove conditional logic from code, I began writing my Rails actions like: def create @user = User.new params[:user] @user.save! redirect_to user_path(@user) rescue ActiveRecord::RecordNotSaved flash[:notice] = 'Unable to create user' render :action => :new end I did this until one of my co-workers saw this and said: exceptions should not be expected What? When writi
Rails 5 has added OR method to Active Relation for generating queries with OR clause. 1 2>> Post.where(id: 1).or(Post.where(title: 'Learn Rails')) 3 SELECT "posts".* FROM "posts" WHERE ("posts"."id" = ? OR "posts"."title" = ?) [["id", 1], ["title", "Learn Rails"]] 4 5=> <ActiveRecord::Relation [#<Post id: 1, title: 'Rails'>]> 6 Copy This returns ActiveRecord::Relation object, which is logical unio
railsのコードを読んでいたときに目にしたのでメモ。 rails - belongs_to should default to required: true #18233 Add config/initializers/active_record_belongs_to_required_by_default.rb Newly generated Rails apps have a new initializer called active_record_belongs_to_required_by_default.rb which sets the value of the configuration option config.active_record.belongs_to_requred_by_default to true when ActiveRecord is not ski
tl;dr Railsではコネクションプール数を設定していても、1スレッド辺り1コネクションしか持ちません。 発端 アカツキではRails + Unicorn + Nginx + MySQLの構成をAWSで運用しており、c3.4xlargeのインスタンス上で1台辺り64のUnicornワーカープロセスが実行される設定になっています。 ソーシャルゲームでは時にたくさんのアプリケーションサーバを並列稼働される必要がでてきます。特に年末年始の時期は平時の2-3倍のトラフィックが予想され、アプリケーションサーバを最大100台で稼働させる必要がありました。 Railsのdatabase.ymlのpool設定は5だったので、単純に考えると最大 100台 * 64プロセス * 5接続 = 32,000個の接続が常時貼られるのでは?MySQLのmax_connectionsの設定は大丈夫か?という議論があ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く