Active StorageでアップロードしたファイルのURLを即返すときに気をつけること

(注記)これはだいぶ雑なまとめです。間違いあったら教えて下さい! ActiveStorageでDiskServiceを利用している場合、URLのドメイン部分はリクエストからいい感じに生成される ActiveStorage::SetCurrentというモジュールをコントローラにincludeするとbefore…

rubymineでFind Actionしたいのにできないのを解決する方法

rubymineのキーバインドにcmd+shift+aがfind action(アクションに絞り込んだ検索)として用意されている が、mac上で実際にそれを打つとなぜか次のようになる これは↓にある「ターミナルのmanページインデックスで検索」のキーバインドと競合しているから ↑の…

docker-compose コマンドとdocker composeコマンドは別物

M1 macでdocker-compose upするとなぜか exec /usr/local/bin/docker-entrypoint.sh: exec format error docker imageはintel用なのでそれが関連している と思って色々試したがなにも変わらず docker desktopのバージョンを4.31.0 -> 4.32.0に上げたらdocker…

E2Eテストでバリデーションを調整してタイムアウトを抑制する

関連: system specでNet::ReadTimeoutになったら - おもしろwebサービス開発日記チラシの裏 やっぱりタイムアウトの時間を伸ばすのではなく、テスト側でバリデーションの条件を緩和してあげたほうがトータルのテスト実行時間が短くなっていいんじゃないか、…

flashメッセージが時々表示されないflakyテストを改善した話

Railsで cookie sessionを使っている 非同期でAPIをよく叩いている という条件下で、例えば日報を投稿したあとに"投稿しました!"というflashメッセージを表示しているはずなのになぜか"投稿しました!"が表示されないという現象が時々起こっていました。 こ…

Rails8.0.0マイルストーンの現状

これはなに 8.0.0 Milestoneを見て気になったものをまとめています マイルストーンは先週くらいにできたのですがもうマージされているやつもたくさんあります DHHが年末年始にめっちゃ働いている 気になったものたち Ruby3.3以上のサポート DHHは最初3.3以上…

turboからのリクエストに対してリダイレクトするときに気をつけること

turboを利用していて、destroyアクションでリダイレクトを使うときステータスコードを明示的に303(see other)にしないと、リダイレクト先にDELETEメソッドでアクセスしてしまうというハマりポイントが有る 参考: Rails 7.0 + Ruby 3.1でゼロからアプリを作っ…

Beats Studio Proを買ったけど返品した

ここ数年はずっとBoseのquiet comfort35を使っていて、音質などには不満は特にありませんでした。 でも複数pcを切り替える時AirPodsなどと比べると面倒*1。あとは2台同時にペアリングしている時に音を出したいデバイスではない方がアクティブになり、そちら…

テストでWebsocketのsubscribeが終わるまで待ちたい

ページを開く ActionCableのブロードキャストを実行する ブロードキャストの結果画面が変更されるのを確認する というテストがあるときに、2がActionCableの該当チャンネルのsubscribeより前に実行されてしまいテストが失敗する、という事象があった。 なの…

bullet的なN+1自動検知gemのprosopiteが気になる

charkost/prosopite: Rails N+1 queries auto-detection with zero false positives / false negatives プロソパイトと読むらしい? Prosopite is able to auto-detect Rails N+1 queries with zero false positives / false negatives. とのこと 実装は簡潔…

CLionでCRubyのコードを読む

CLionでCRubyのコードをただ開いただけだとうまくコードジャンプが効かない どうやったらええんや…となっていた Makefileを開くと↓のように、「Makefileプロジェクトのロード」が表示されるのでロードするとそれっぽいジャンプができるようになった これでCR…

RubyがもっとCoWフレンドリーになりそう

Implement Process.warmup by byroot · Pull Request #7662 · ruby/ruby Feature #18885: End of boot advisory API for RubyVM - Ruby master - Ruby Issue Tracking System Ruby本体にProcess.warmupというメソッドが追加される 現時点のステータスとして…

searchkickを使ったテストをするときに気をつけること

RSpecでsearchkickを使うときにどう設定するかがREADMEに書かれている searchkick/README.md at master · ankane/searchkick ↑を見ると、searchタグを付けたときだけsearchkickが有効になるように読める が、これは間違い searchkickの提供するコールバック…

CIでopensearchコンテナの起動を待つ

CIで時々opensearchへのアクセスに失敗してテストが失敗していた (ちゃんと調べたわけではないけど)opensearchの起動が終わるより前にアクセスしにいって失敗している風 Faraday::ConnectionFailed: end of file reached opensearchコンテナ、毎回Dockerfile…

リスコフの置換原則のWikipedia日本語版の説明が一部間違えている気がするがどうなおしたらいいかわからない

リスコフの置換原則 - Wikipediaで (直感的な考えでは、「サブタイプ」のオブジェクトは別の型(「スーパータイプ」)のオブジェクトのすべての振る舞いと、更に別の何かを備えたものである。 ここで必要とされるものは、以下に示す置換の性質のようなもの…

jsのArray.prototype.sort()は引数を渡さないと、要素を文字列に変換して比較する

タイトルがすべて。 rubyだと elements = [100, 99] elements.sort #=> [99, 100] のようになるのでjsでも同じ挙動を期待するけど、タイトルの通りの仕様なので次のようになる。 const elements = [100, 99] elements.sort() #=> [100, 99] sortの引数に次の…

herokuの無料dyno/addon有料化で無料のままでいるDBやredisは削除される(が、サポートの人に頼むと復旧してもらえる)

タイトルがすべて。 herokuの有料化、個人アカウントの方はほったらかしておくとDB削除されちゃうんですね…てっきり有料のやつに自動で変わると思っていた…— willnet (@netwillnet) December 9, 2022 For non-Enterprise users, hobby-dev databases will be…

cookiesのサイズ制限っていまどんな感じですか 発端はこのコミットを見たことAdd details of cookie name and size to CookieOverflow exception · andyw8/rails@0ec8f21 クッキーの値が4096バイトより大きければエラーになっている コミットは、エラー時に…

default gemとrubygems.orgから取得するgemの違い

default gemとは、standard librariesとdefault gemsとbundled gemsの違い - esm アジャイル事業部 開発者ブログが詳しい default gemはrubyがビルドされるときに一緒にビルドされており、rubygems.orgで配布しているものと同じバージョンを指していてもコー…

Rails7でシステムテスト失敗時のスクショが保存されるディレクトリが変わる

Rails7未満でスクショが保存される先は"tmp/screenshots"配下固定だった。 このコミットでスクショ保存のディレクトリの設定が変更になって、「Capybara.save_pathがあればそれを優先して使う」になった。 require 'capybara/rails'すると Rails.root.join('…

Tower Git Clientでgitのhookを動かす

gitの操作にTower Git Clientを使っています 一部の行を選択してstagingしたり、コミットを移動させたりsquashしたりするのがCLIより楽 が、PATHの設定がないのでhuskyなどを使っているとコミット時にエラーになりコミットできない、ということがあってスト…

LeanとDevOpsの科学を読んだ

LeanとDevOpsの科学[Accelerate] テクノロジーの戦略的活用が組織変革を加速する impress top gearシリーズ | Nicole Forsgren Ph.D., Jez Humble, Gene Kim, 武舎広幸, 武舎るみ | 工学 | Kindleストア | Amazon 1章をざっと読んで、2,3章はほとんど飛ば…

ディスプレイをどう配置するのがベストかPart2

ディスプレイをどう配置するのがベストか - おもしろwebサービス開発日記チラシの裏 の続き。 この記事をもとに色んな人に聞いたところ、縦 * 2の構成でも、zoomやgoogle meetの共有をウィンドウ単位にすればよい、という意見がありました。実際に試してみて…

ディスプレイをどう配置するのがベストか

今はLGの27インチのディスプレイを二台、一台を縦に、一台を横にして運用しています。 昔は二台縦にしていたのですが、最近google meetやzoomなどで画面共有する事が増えたので、横にしておいたほうが参加者に優しいぞ、というのと横幅が広いことが前提とし…

docker-compose runでbashを起動したら何故かctrl-hなどのコマンドが期待通りに動かなくなった

最近のdocker for macのバージョンアップで入力周りなにか変わりました?ctrl-bなどの入力が期待通りにならなくなったんだけど…— willnet (@netwillnet) July 22, 2021 docker-composeの2系にいつの間にか切り替わったのが原因だったようです。docker-compos…

docker環境でシステムテストを途中で止めてブラウザで画面を確認する

savanna日報から改変してブログに書く試み ref: slackのhuddle良さそう - savanna.io Railsがdocker環境でなければheadlessではないchromeを使うのが楽 Railsがdocker環境であれば、remote debuggingを有効にする remote-debugging-port=9222 remote-debuggi…

脆弱性情報をどこまでどうやって共有するのが良いのか

脆弱性が見つかって、対応パッチが入ったgemの新しいバージョンがリリースされるということはよくあります。そういうときに僕は内容を把握して「こういう脆弱性があるので早くバージョン上げましょうね」と各お手伝い先に共有しています。 各お手伝い先にと…

n_plus_one_controlはrequest specで使うのが良いという話とrequest specでログイン後のリクエストを投げるための方法について

savanna.io の日報からの転載。ちゃんと整形したり説明詳しく入れてメインのブログで公開しようと思ってたんだけど時間がなさすぎた palkan/n_plus_one_control: RSpec and Minitest matchers to prevent N+1 queries problem N+1をテストで検出できて便利 …

type="date"なフォームをcapybara+chromeでテストするには

type="date"なフォームは現時点ではsafari以外のブラウザはカレンダーっぽい入力に対応している (追記)safariの14.1からカレンダーっぽい入力対応になった - HTML: HyperText Markup Language | MDN こんな感じになる 入力もtype="text"のときとは違うようで…

GitHubのiosアプリケーション

子供の隙をついてレビューを進めたい時など便利に使えているのだけど、ちょっと複雑なPRだと次のように内容が表示されずに辛い。早く対応して欲しいぞ