タグ

railsに関するlilpacyのブックマーク (22)

  • スタディサプリ最大のRailsアプリケーションにYJIT+pitchforkを導入してメモリ使用量を劇的に削減するまで - スタディサプリ Product Team Blog

    こんにちは。SREのkyontanです。Rubyが大好きなのでRubyの話をします。ちなみにリクルートはRubyKaigi 2024へGold Sponsorとして協賛しています! *1。ぜひ沖縄でお会いしましょう。 これはあるアプリケーションのメモリ消費量を示すグラフなのですが、まさかgemを入れ替えるだけでこんなに嬉しい変化が見られるとは思っていませんでした。今日はそんなgemの話をします。 話は遡って2023年4月のある日、インターネットを眺めていたところ、ShopifyがpitchforkというOSSを公開したという情報が目に留まりました。 調べてみると、どうやら著名なRackサーバー実装の1つであるunicornの派生版であり、メモリ使用量の削減に特化しているらしいのです。 github.com これはスタディサプリ小中高のあのリソースドカいマイクロサービス第一位である api

    スタディサプリ最大のRailsアプリケーションにYJIT+pitchforkを導入してメモリ使用量を劇的に削減するまで - スタディサプリ Product Team Blog
  • ActionDispatch::Http::UploadedFileを紐解く

    TGIFですね。 昨日のエラーを解決する中で、気になる表示がありました。 Active Storageで画像ファイルを送信する時に現れるこのオブジェクト。 "ActionDispatch::Http::UploadedFile" これは一体なんなんだい?と言う記事です。 その正体は?? Dispatchって? ケンブリッジディレクトリでの定義は以下の通り。 to send something, especially goods or a message, somewhere for a particular purpose: ある目的のためにサムシィング(画像ファイル)をどこか(Active Storage)に送り出すこと、かな。 ActionDispatch::Http::UploadedFileの定義 Models uploaded files. The actual file is

    ActionDispatch::Http::UploadedFileを紐解く
    lilpacy
    lilpacy 2021/08/19
    ファイルアップロードした時にメモリに保持するActionDispatch::Http::UploadedFileに色々生えてて便利
  • Rails開発でやっておくと良かったCI設定集 - STORES Product Blog

    STORES 予約 でwebアプリケーションエンジニアをやっております。ykpythemindです。 Rails開発で、どのようなアプリケーションでも抑えておくとチーム開発が少し楽になるポイントがあります。今回はいくつか実例を載せながら紹介します。 アプリケーションの設計的な部分や実装には踏み込まず、すぐに導入できます。 あくまでRailsアプリケーションについての記事ですが、他言語やフレームワークを用いていても同様のことができます。 1. シードデータが壊れないようにCIで担保する 新しいメンバーが入って環境構築をしてもらう度にシードデータが壊れており、 db/seeds.rb *1 を直すという作業を何回か経験しています。db/seeds.rbで実行する内容をテスト中に実行しておくとメンテされるようになります。 # db/seeds.rb # 定数データが必要であればここで呼ぶ req

    Rails開発でやっておくと良かったCI設定集 - STORES Product Blog
  • Active Record の関連付け - Railsガイド

    1 関連付けを使う理由 Railsの「関連付け(アソシエーション: association)」は、2つのActive Recordモデル同士のつながりを指します。モデルとモデルの間で関連付けを行なう理由はおわかりでしょうか。関連付けを行うことで、自分のコードの共通操作がシンプルになって扱いやすくなります。 簡単なRailsアプリケーションを例にとって説明しましょう。このアプリケーションにはAuthor(著者)モデルとBook(書籍)モデルがあります。一人の著者は、複数の書籍を持っています。 関連付けを設定していない状態では、モデルの宣言は以下のようになります。

    Active Record の関連付け - Railsガイド
  • Railsのセッション管理には何が最適か - Qiita

    前提 webアプリを複数立ち上げ、それらのユーザーログインのセッション管理をどう実装するかで議論になった。 Railsで使用できるセッション管理方法にはたくさんの方法があり、それぞれのメリット・デメリットをまとめることで最適解を導く。 今回比較対象にするセッション管理方法は以下の種類。 - CookieStore(クッキー方式) - Redis(インメモリ方式) - ActiveRecord(DB方式) CookieStore(クッキー方式) 仕組み Session情報を全てsecret_key_baseで暗号化し、クライアントのCookieに保存する。 Cookieに保存したSession情報をリクエストの際に全て送信し、サーバではsecret_key_baseで復号し、Session情報を取得する。 メリット Railsのデフォルトで用意されているセッション管理方式なので、手軽に使え、

    Railsのセッション管理には何が最適か - Qiita
  • Rails の session を完全に理解した - Qiita

    こんにちは、べログ DevOps チーム / データサイエンスチームの爲岡です。 べログ Advent Calendar 2018 に書くのは2度めです。 お時間ございましたら、1つめの記事も読んでいただけると嬉しいです。 Ansible controller/target を Docker コンテナで構築する はじめに https://togetter.com/li/1268851 を御覧ください。 下記、記事の抜粋です。 【エンジニア用語解説】 「完全に理解した」 製品を利用をするためのチュートリアルを完了できたという意味。 「なにもわからない」 製品が質的に抱える問題に直面するほど熟知が進んだという意味。 「チョットデキル」 同じ製品を自分でも1から作れるという意味。または開発者人。 私は今は DevOps チームとデータサイエンスチームでエンジニアをしてますが、新卒で入社し

    Rails の session を完全に理解した - Qiita
  • Rails でドメインロジックの実装方法まとめ - assertInstanceOf('Engineer', $a_suenami)

    このエントリは Ruby on Rails Advent Calendar 2014 の 7 日目のエントリです。 前日は seri_k さんの「Turbolinksさんと上手く付き合う10の方法」でした。 お詫び WIP です。公開期限に間に合わない可能性があるため、まだ途中ですが先に公開してしまいました。 サンプルコード等を後ほど追記する予定です。 → 12/08 18:10 追記しました。 Rails のファットモデル問題 Rails で構築したアプリケーションが大規模になり機能が増えていくにつれてモデルが大きくなり、そのうち手がつけられなくなる問題は古くから指摘されています。これについてはもはや詳細を述べるまでもないと思うので割愛しますが、この問題は 2014 年になった今でも多くの開発チームを悩ませていると感じています*1。 このエントリでは、普段 Rails を業務で使いながら

    Rails でドメインロジックの実装方法まとめ - assertInstanceOf('Engineer', $a_suenami)
  • ActiveRecordのcountとlengthとsize - メグリ株式会社

    lengthの場合、SQLの実行結果の行数をカウントするため、COUNTを使ってカウントするcountやsizeの方が処理は軽くなります。 しかし、countはキャッシュを使わないため、毎回COUNTのSQLを実行してしまいます。 行数のカウントだけであれば、キャッシュの有無で判断してくれるsizeを使ったほうが良さそうです。 ちなみに今のRailsSQLを遅延実行するようになっているので、たとえば以下の様なSQLが2回発行されるようなコードでも、 pry(main)> clients = Client.all Client Load (0.3ms) SELECT `clients`.* FROM `clients` pry(main)> clients.count (0.3ms) SELECT COUNT(*) FROM `clients` => 5 メソッドチェイン

    ActiveRecordのcountとlengthとsize - メグリ株式会社
  • ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita

    ActiveRecordでN+1クエリを潰すためにeager loadingを行う場合、preloadやincludesやeager_loadが役に立つ。 Preload, Eagerload, Includes and Joinsという記事にそれらの違いがよくまとめられているんだけど、includesが挙動を変える条件があまり正確に書かれていなくて自信が持てなかったし、そもそも記事が古いのでRails4.1.5のソースを読んで調べた。 せっかく調べたので、全体を通して日語でまとめてみようと思う。 User.joins(:posts).where(posts: { id: 1 }) # SELECT `users`.* FROM `users` INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id` WHERE `posts`.`id

    ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita
  • Ruby, Railsの存在確認イディオムまとめ - Qiita

    はじめに このメソッドが存在したら この変数が配列で何か入っていたら Item.firstで何か見つかったら というのは結構出てくるパターンで、簡潔に書ける場合も多いのでまとめました。 使うとコードが分かりにくくなる場合もあるので、容量用法を守って使いましょう。 基の確認 ローカル変数が定義されているか 前提 定義されていないローカル変数は使おうとすると例外を起こす

    Ruby, Railsの存在確認イディオムまとめ - Qiita
  • Railsで、どちらか一方のカラムを入力必須(二者択一)にするバリデーション - Qiita

    はじめに Ruby on Rails で どちらか一方のカラムを入力必須にするバリデーションについて書きます。 具体的な例をあげると、ユーザーモデルのemailとphone、どちらか片方だけに必ず値が入るようにバリデーションします。両方に値が入っている場合もNGです。 要件に合わなかったバリデーション ググって下記のようなバリデーションを見つけましたが、両方入力した場合にバリデーションを通ってしまうので、要件には合いません。 class User < ApplicationRecord # phoneが空ならば、emailを必須にする validates :email, presence: true, unless: :phone? # emailが空ならば、phoneを必須にする validates :phone, presence: true, unless: :email? end

    Railsで、どちらか一方のカラムを入力必須(二者択一)にするバリデーション - Qiita
  • Rails5でenumの文字列ではなく、実態値が取得したい場合は {{enumの名前}}_before_type_cast - コード日進月歩

    昔はできたが今はできない系 環境 $ bundle exec rails -v Rails 5.2.1 例 以下のようなenumがあるとする class User < ActiveRecord::Base enum sex: { not_known:0, male: 1, female: 2, not_applicable: 9 } #...(後略).... こんなときに『男性のときは1の数値がほしい』となっても user = User.find(1) user.sex # => "male" のようになってしまう。 整数値部分を取りたい場合は、cast前の値と取りたいということになるので {{カラム名}}_before_type_cast が使える user = User.find(1) user.sex_before_type_cast # => 1 参考リンク Rails5でenum

    Rails5でenumの文字列ではなく、実態値が取得したい場合は {{enumの名前}}_before_type_cast - コード日進月歩
  • pluckよりもmapのほうが高速なケース - Qiita

    ActiveRecord Relationから特定のカラムの配列を取得したいとき、基的にはmapではなくpluckを使うべきです。 References http://blog.mitchcrowe.com/blog/2012/04/14/10-most-underused-activerecord-relation-methods/ http://blog.livedoor.jp/sasata299/archives/51847390.html http://blog.mitchcrowe.com/blog/2012/04/14/10-most-underused-activerecord-relation-methods/ ただし、pluckはインスタンス化されたオブジェクトに対しても毎回SELECT文を投げてしまうようなので注意です。 pluckを使うべきケース pluckは必要な

    pluckよりもmapのほうが高速なケース - Qiita
  • pry-byebugでrubyをデバッグする - Qiita

    pry-byebugとは pryでデバッグするためのプラグイン pry-debuggerの後継らしい GitHub https://github.com/deivid-rodriguez/pry-byebug pryとは irbのように対話的にrubyを実行するためのツール irbに比べてドキュメントが見れたりシンタックスハイライトが効いたりする pry-byebugをインストールする gem install pry-byebug pry-byebugを使う デバッグしたいコードにrequire 'pry'を追加する あとは、ブレークポイントをうちたい場所にbinding.pryを書いて実行すればその箇所で処理が止まってくれてpryが起動します #!/usr/bin/env ruby require "thor" require "pry" x = 10 y = 20 z = 30 bin

    pry-byebugでrubyをデバッグする - Qiita
  • リソースモデリングパターンの提案 #sendagayarb

    RailsにおけるRESTfulなURL設計勉強会 http://d.hatena.ne.jp/tkawa/20120726/p2

    リソースモデリングパターンの提案 #sendagayarb
  • How to manually change the password using Devise

    When you create a web application with Rails, using devise makes it easy to create a login authentication part. By using devise, the user's password is encrypted and stored. There are times when you want to change your password by directly modifying data as you are developing. In that case, do as follows.

    How to manually change the password using Devise
  • Railsで感嘆符!を理解しよう(save, save!) - Qiita

    はじめに Railsの勉強をしている際、「メソッドの最後に!がついているけど何だこれは???」と思ったことがありました。Rubyの場合は!で否定演算子や!!でメソッドの返り値をtrue/falseにするなどがありますが、今回はRailsメソッドの感嘆符!について説明していこうと思います。 感嘆符!とは 感嘆符とはエクスクラメーションマークのことです。以下Wikipediaより (かんたんふ)とは、約物のひとつで、「!」 と書き表される。 雨垂れ、または俗にビックリマークとも呼ばれる。 また英語表記に由来した呼称「エクスクラメーション・マーク (exclamation mark)」と呼ばれることもある。 !をつけるとつけないとでは何が違うのか? よく使われるメソッドでcreateやsaveなどがあります。これらの処理を実行しレコードの作成、保存に失敗した際、通常の場合はnilを返します。しか

    Railsで感嘆符!を理解しよう(save, save!) - Qiita
  • Railsでのバッチ処理について(rails runnerとrake taskの違い) - Qiita

    アプリケーション開発をしているとアドホックに実行したいスクリプトがある時や大量のデータを処理したいときなど、バッチ処理を書きたくなる時ってありますよね。 Railsでバッチ処理を書く際によく使われている方法として有名なものが下記の3つだと思います。 rails runner スクリプトとしてバッチを書く rake task ビルドタスクとしてバッチを書く sidekiq 非同期処理としてバッチを書く アプリケーションを新規開発する際、バッチ処理のトリガーをrails runnerを使用するかrake taskを使用するかで迷ったのでまとめてみました。 sidekiq使う場合もバッチ処理内で呼ぶ想定なのでsidekiqでのバッチ処理についてはまとめていません。 先に結論言っておくと『バッチ処理を行うという観点ではrails runnerもrake taskもそこまで変わらない』です。 Rai

    Railsでのバッチ処理について(rails runnerとrake taskの違い) - Qiita
  • Ruby & Rails Compatibility Table - FastRuby.io | Rails Upgrade Service

    This is a short post to show the compatibility between Ruby on Rails opens a new window and Ruby opens a new window across different versions. In the process of upgrading really old applications to more modern versions of Ruby and Rails we have run into a lot of these combinations.

    Ruby & Rails Compatibility Table - FastRuby.io | Rails Upgrade Service
  • Railsプロジェクトで好んで使っている便利な処理 - alpaca-tc

    Railsプロジェクトで、自分が好んで使っている便利な処理をまとめてみました。 core_ext編 sort_byは安定ソートではないので、with_indexを組み合わせて安定ソートを行う https://gist.github.com/alpaca-tc/ed793961f2db438abaae3c00b7e303fa RSpec編 partial viewでインスタンス変数を呼び出していないことをチェックするテスト https://gist.github.com/alpaca-tc/c19f00d583234a2c73eda6d8378b8c50 モデルが変更された際に、参照元・参照先の双方に関連が定義されていることをチェックするテスト https://gist.github.com/alpaca-tc/d53dee5977746256717c7522988b13d8 テーブルが変更

    Railsプロジェクトで好んで使っている便利な処理 - alpaca-tc