タイトルに書きたいことが長いとタイトル付けに困りますね。 今日は、「Ruby onRails の ActiveRecord の insert_all でMySQL向けに発行されるSQLに ON DUPLICATE KEY UPDATE foo = foo が含まれている理由」について、知っておこう。(調べました) TL;DRRuby onRails の insert_all で発行されるSQLには ON DUPLICATE KEY UPDATE foo = foo が末尾に指定されている foo はどうやら INSERT INTO で登録先として指定している列の1番目 upsert_all に ON DUPLICATE KEY UPDATE が指定されているならまだしも、insert_all にこの指定があるのは感覚的に気持ち悪い 該当の実装部分はここ https://github

静岡市でWeb開発しているkazuomatzです。 以前、こちらの記事で、Rails +MySQL で位置情報を扱う時に標準だったライブラリ activerecord-mysql2spatial-adapterについて書きました。 ライブラリの開発が止まってしまい、新しいRailsのバージョンに更新しようとすると対応されていないので、リポジトリをforkして、Rails6.0で何とか動かした話です。 今年、AWSのRDSのMySQL5.7系のサポートの終了がアナウンスされました。2024年2月以降、RDSでMySQL5.7を利用し続けるには、有償の延長サポートに入る必要があります。 というわけで今年は、MySQL5.7で稼働しているシステムをMySQL8に更新するお仕事が数件ありました(2023年12月現在、まだまだ絶賛実施中です)。 当然、MySQL5.7とMySQL8.0に移行するに

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。Ruby onRailsのActiveRecordをぼーっと使っていると、メモリにあるデータやdbにあるデータの整合性が取れなくなってバグを生んでしまう事があるという話です。 ActiveRecordが好きなのでたびたびActiveRecordの話をしますが、今回はうっかりやってしまいがちなDB上のデータとメモリ上のデータの不整合との話です。知らないと失敗しがちなのでrailsは5.1.1を使っていますが、あまりバージョンには関係なく、rails固有というわけでもなさそうな話です。 うっかりしてしまった! プレイヤーが複数持つデッキの中から、一つだけメインデッキを選べるような実装がしたいとします。 class Player < ApplicationRecord has

概要 原著者の許諾を得て翻訳・公開いたします。英語記事:Rails Quick Tips:Temporarily Disabling Touching with ActiveRecord.no_touching - Karol Galanciak -Ruby onRails andEmber.js consultant 原文公開日: 2018/02/25 著者: Karol Galanciak サイト: BookingSync 2018/04/18: 初版公開2023/03/16: 更新 参考:RailsAPI touch -- ActiveRecord::Persistence 参考:RailsAPI no_touching -- ActiveRecord::NoTouchingRails: Active Recordのtouchをno_touchingで一時的に

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の怖い話 僕も主に仕事のコードレビューで過去に何
作ったgemはこれです。github.com 使い方 ApplicationRecord でモジュールを include してください。 class ApplicationRecord < ActiveRecord::Base include ActiveRecordInCache::Methods self.abstract_class = true end 自動的に maximum(:updated_at) を使ったキャッシュキーを生成し、2回目以降はRails.cache からオブジェクトを取り出します。 Article.all.in_cache # SELECT MAX("articles"."updated_at") FROM "articles" # SELECT "articles".* FROM "articles" #=> [#<Article:0x000000000
概要 原著者の許諾を得て翻訳・公開いたします。英語記事: Avoid WritingSQL When Using ActiveRelation - Andy Croll 原文公開日: 2018/02/18 著者: Andy Croll 訳注: 原文のActiveRelationは訳文でActiveRecord::Relationに変更してあります。 ActiveRecord::Relationは、ActiveRecordの検索やクエリエンジンを強化する、柔軟で強力なツールです。 次のようには書かないこと ActiveRecord::Relationの#whereメソッド内で生SQL文字列を式展開(interpolation)で直接書く。 Person.where("name = #{ params[:name] } AND hidden_at IS NULL") これもやらないこと ?

こんにちは、インターネットコンテンツ兼新米エンジニアのTerryです。 日曜日にQiitaを投稿しても伸びないことは知っている。 でもそこは何があったか察してほしい、すまない。 さて本日は、Railsでモデルを4段階joinする方法についてお伝えします。 その過程でjoinsについて分解して解説して、joinsへの理解を深めます。 最初に断っておくと、この書き方は僕の尊敬する先輩エンジニアに教えていただいたもので、僕の備忘と理解を深めるため無断で掲載しようと思った次第です怒られたら削除します。 2段階(孫)とか3段階(ひ孫)は結構あるんですが、4段階(玄孫[やしゃご])はあまりノウハウが転がっていなかったので、こんなやりかたもあるよ、って感じで知っておくとどこかで使えるかもしれません。 4段階、玄孫ですよ。 どれだけ遠いかって言うと、大久保利通の玄孫が麻生太郎です。幕末か。 (画像はUND

Ruby onRails 8.1.1 Module ActiveRecord::Locking::Pessimistic activerecord/lib/active_record/locking/pessimistic.rb Pessimistic Locking¶ ↑ Locking::Pessimistic provides support for row-level locking using SELECT … FOR UPDATE and other lock types. Chain ActiveRecord::Base#find to ActiveRecord::QueryMethods#lock to obtain an exclusive lock on the selected rows: # select * from accounts where id=1 fo
最近立て続けにレースコンディション問題に遭遇したのでメモ。 レースコンディション(競合状態)とは、複数のプロセスやスレッドが共有リソースに対して何らかの操作をする際に、処理のタイミングによって結果が異なってしまう状態のこと。よくトランザクションの解説の際に銀行口座の例として紹介されるおなじみのやつです。 今回は、アプリケーションの書き方によって発生するレースコンディションと、MySQL のテーブル定義時の制約不足で発生するレースコンディションについてそれぞれ紹介したいと思います。 どちらの場合も共有リソースはDB で、条件を満たすと意図しない形でデータが保存されてしまいます。 サンプルアプリケーション サンプルアプリケーションとして、簡単なアクセス解析機能付きの短縮URL ツールを考えます。 アクセス解析機能として、以下のような機能を持つとしましょう。 URL毎 にクリック数を計測できる
1.0.0 1.1.0 1.1.1 1.1.6 1.2.0 1.2.6 2.0.0 2.0.1 2.0.3 2.1.0 2.2.1 2.3.2 2.3.8 3.0.0 3.0.5 3.0.7 3.0.9 3.1.0 3.2.3 3.2.8 3.2.13 4.0.0 4.1.0 4.2.1
https://techplay.jp/event/679666

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く