Ruby on Rails
小ネタです。migrationの際にテーブルコメントを追加する情報は検索すればいくらでもヒットするんですが、ActiveRecordでテーブルコメントを参照する方法はなかなかヒットしなかったので、メモしときます。 環境情報 Rails 6.1.6.1 Ruby 3.1.2 方法 ヒットし…
環境情報 Rails: 6.1.6.1 Ruby: 3.1.2 Database: PostgreSQL 11.x Elasticsearch 7.x DBに保存したらElasticsearchも更新されたい Railsプロジェクトで、データベースへの保存を行ったら同時にElasticsearchへの反映も行いたい、というケースが出てきました…
RSpecで、ブロック引数に渡されたオブジェクトが、とあるメソッドを実装しているかどうかによって処理を変える件のテストをしたかったのだけれど、どうやったらいいかわからなかったので調べました。 テストしたい処理 class Hoge < ApplicationRecord def f…
rake taskではreturnが使えないのは知っていたので、引数チェックに引っかかったらnextを使っていたのだけど、それだと次の処理に移動してしまうし、終了コードが0となって正常終了扱いされてしまうなと気付きました(今更かよって感じですが) じゃあexit(1…
前回の記事はこちら。 patorash.hatenablog.com 今回は、prettierを導入して、gitでcommitする際にrubocopだけでなくprettierでもフォーマットチェックをさせるようにした話です。 prettierとは? prettierは、フロントエンド用のコードフォーマットツールで…
長年の悩みで、git commitするタイミングでrubocopを実行したいというのがあった。以前に個人的にgitのpre-commitを使って行う方法を調べて、それをやっていたのだが、それだと自分の環境ではできるけれど、他の開発メンバーに同じことを適用できない。また…
GraphQLを使ってWebAPIの構築をやっているのですが、対象のデータが存在しない(ActiveRecord::RecordNotFound)場合にどうすればいいかがわからなかったので調べました。 結論 graphql-rubyのエラーハンドリングのところに書いてありました。 graphql-ruby.…
先週ですが、うちのプロダクトのRailsのバージョンを6.0系から6.1.4.1にアップグレードしました。その際に、1人でアップグレードを行うのではなく、チームメンバー3人全員でバージョンアップを行ったので、それについて書いておこうと思います。 なぜ全員で…
今月初頭に社内ISUCONを開いたという記事を書きました。 patorash.hatenablog.com その環境を仮想環境で構築してローカルでも試せるようにとVagrantを使って準備したのですが、自分がそれを使っていてハマッたのでメモ。 Vagrant上では、nginxを経由して表示…
昨日発生したのですが、テストも通ってステージング環境に反映したら、表題の件が起きました。 Elasticsearch::UnsupportedProductError The client noticed that the server is not a supported distribution of Elasticsearch. これはもしや、アレでは…。…
これは、以下の記事を参考にしていたときの副産物ですが、ちょいちょいハマったところがあるので記事にしておきます。 techracho.bpsinc.jp ローカルでついうっかりsystem specを行うと、初回アクセス時にwebpacker:compileが実行され、最初のテストがほぼ、…
ようやくやりたかった社内イベントであるRails ISUCONを開催できたので、そのことについて書いていく。 Rails ISUCONの目的 目的は、主に3つ。 自身の知見をチームメンバーに拡げる(チームメンバーから知見を得る) コミュニケーション 様々な角度からRails…
課題:データを弾くためにN+1問題が発生していた 数年前に実装した、CSVデータをDBにインポートするためのプログラムがありました。 単にインポートするだけならいいのですが、除外リストに登録済のデータは弾いてほしい、という要望があり、そのように実装…
表題の通りですが、今まで運用していて全然気づかなかったことでした。 Elasticsearchにクエリを投げると、ヒットした際にレスポンスがめっちゃ長くてdevelopment.logが見づらくなってました。 ログをよく見ると、レスポンスからrecordsメソッドを呼ぶと、ヒ…
この記事はQiitaにも書いていますが、一応ブログにも同様のものを載せておきます。 qiita.com graphql-rubyはリソースの参照元のデフォルトがActiveRecordなので、それをElasticsearchに変更したかったのですが、ライブラリがなかったので自分で実装しました…
この記事を読んで、SeleniumからCupriteに移行できたらテストがまた速くなるんじゃないか?と思ってここ数日動作検証してるのですが、思った以上にうまくいかないので、一旦移行を諦めようかなという気持ちになっています。 techracho.bpsinc.jp とはいえ、…
第三回リファクタリングデーを開催したのだけれど、これがすごくよかったのでまとめておく。 お題はキャッシュ化 後輩氏とパートナーさんは、まだキャッシュにすることの経験がなかったので、過去にそれぞれが実装したところ等でキャッシュ化できそうなとこ…
auditedというgemを使って、監査ログを保存するようにしたいと思い、現在調査中。 github.com 大体はよさそうなので、採用したいと思っているのだけれど、困ったのが、rails consoleとかでデータ変更されたとき。データ変更の履歴は残るものの、誰がやったか…
私はimyouというニックネーム管理用gemを公開しているのですが、開発時にPostgreSQLを使っていました。 しかし、RailsのデフォルトのデータベースはSQLiteなので、SQLiteで開発したほうがよかろうと考え、SQLiteに変更してテストを実行したところ、なんと落…
今期に入ってメンバーが私1人から新人(2年目)とパートナーさんが追加されて3名体制になったので、情報格差をなくすための活動に勤しんでいる。 以前にいたメンバーはそれなりに最初からRailsに詳しかったりしていたので、そこまで情報を整理しなくても勝手に…
DBのカラムにコメントを追加するシリーズ、いよいよ最後。 テーブルにもコメントを付けていきます。 今までの記事はこちら。 patorash.hatenablog.com patorash.hatenablog.com patorash.hatenablog.com patorash.hatenablog.com テーブルを抽出する テーブ…
データベースのカラムにコメントを追加していくシリーズ。 今までの経緯はこちら。 patorash.hatenablog.com patorash.hatenablog.com patorash.hatenablog.com ここまでで、I18nを使ってデータを突っ込んだので、残りはそれらで漏れたテーブル・カラム群と…
前回はI18nのデータを元にコメントを追加するというやつを書きました。 patorash.hatenablog.com 今回は、さらに踏み込んで、ActiveRecord::Enumの値が何を示しているのかを、メタプログラミングを使ってコメント化しました。 なお、プロジェクトではgem enu…
前回、こういう記事を書いてました。 patorash.hatenablog.com Mackerelにテーブル数、カラム数、コメント数を表示できるようにしたわけですが、カラム数に対してコメント数が0でこれから全部やっていくの辛い〜と思っていたのですが、ふと、I18nから引っ張…
先日のOSO2020で、はてなの吉田さん(id:syou6162)がカラムのコメント数をMackerelのサービスメトリックとして登録して可視化したという話をして感銘を受けたので早速rake taskを作ってみた。 なお、先日の記事。 patorash.hatenablog.com 言及されていたのは…
Rails 6からだけれど、モデルのエラー確認にof_kind?メソッドが使えるらしい。 最初は、伊藤さんのQiitaの記事を見て、be_addedメソッドを知った。これも便利そうだなぁと思っていたのだが、そのコメント欄にRails 6からof_kind?が加わったと書いてあった。 …
副題:CircleCIでdocker-composeを使うのをやめた。 1年前くらいには、CircleCIでdocker-composeを動かす方法についての記事を書いてた。 patorash.hatenablog.com しかし、これが遅い。まぁ自分のやり方が悪いというのはあったのだけれど。ライブラリのキャ…
タイトルで全てを語ってしまいましたが、これです。 WSL2でRailsアプリの動作確認をしようとbin/rails sを実行後、 http://localhost:3000 にアクセスしたのですが、何故か表示されず…。pumaも起動していますが、ポートフォワーディングに失敗しているようで…
自分のための備忘録です。 seed-fuを使ってデータ投入していたのだが、データを作り直そうと思ってseed-fuを再び実行したところ、minioのバケットを作るところでコケた。原因は、既にバケットがあったからだった。 require 'aws-sdk-s3' storage_yml = YAML.…
仕事で、とあるRailsアプリを作っているのですが、そこでstimulusを採用していました。そうしたらちょうど少し前にstimulusのバージョン2.0.0がリリースされていました。このバージョンアップによって、かなり書きやすくなりました。 今までと何が違うのか?…