patorashのブログ

方向性はまだない

Ruby

activerecord-importの削除は難しい

Rails6にしたので、insert_allメソッドが使えるようになったので、意気揚々とgem activerecord-importを削除しようと修正していってたのだけれど、思ったより難しそうだったので、一旦止めることにした。 activerecord-importの削除が難しい理由 recursiveオ…

PaperclipがImageMagickのデフォルト設定の影響で動かなくなったのを直した

昨日、Macのセットアップが終わったという話をしました。 patorash.hatenablog.com そして、Docker立ち上げて作業後にrspecを流したら、全然関係ないところがエラーで落ちるじゃないですか… pryで止めて、@model.errorsを出力してみると… @details={:report=…

7年開発しているプロジェクトをRails6にアップグレードした

Railsのアップグレード作業は検証含めて非常に面倒なもので、結構遅れがちなのですが、どこかで気合い入れてやらなければなーと思い、エイヤッとやってやりました。Rails3からやってるプロジェクトなので負債もまだまだ多いですが、とりあえずメジャーバージ…

gem doorkeeperの承認画面に遷移しない場合があった

gem doorkeeperで連携アプリケーションにログインをさせようとしたところ、認証後に権限の承認画面に遷移せずに普通に認証アプリケーションのログイン後の画面に遷移してしまいました。本来ならば、連携アプリケーションにログインしてほしいのに…。 原因 de…

GETメソッドのFormでの画面遷移をTurbolinksに委ねる

今作ってるアプリケーションではTurbolinksを効かせてて、かなりいい感じだな〜と思ってるのですが、一覧で検索した結果や表示件数を変更した場合に、ページの更新が発生してサクサク移動してたのに、ここでもたつくなぁ…と課題に感じていました。 なんとな…

WSL2 + DockerでRailsの変更を検知しないのを修正した。

表題の通りなのですが、ファイルの変更を行ってからブラウザをリロードしても変更が反映されませんでした。反映しなおすには、Railsサーバを再起動しなければならず、非常に面倒です。 調べたところ、Vagrantでの開発とかでも同様のことが起きたりしているぽ…

deviseで論理削除を実装するときの手順をまとめておく

新しいRailsアプリを作るたびにやっている気がするので、一旦まとめておこうと思います。 今回公開する手順は、削除済みのメールアドレスで再登録可能な論理削除の実装方法です。 Deviseとは? Deviseはアカウント認証管理のgemです。Webアプリケーションに…

gem buoysを使ってパンくずリストを作る

今ちょっと新しいRailsアプリを作っていて、そこでパンくずリストが欲しいなぁ〜と思ったので社内のチャットで「パンくずリストを作るためのgemのデファクトスタンダートってやっぱりgretelですか?」と聞いたところ、I18n対応できるbuoysというgemがあるの…

RailsでModelとDBの制約の検証をするときの方針について

弊社の若者のPRでコメントしたんだけれど、これは普通に記事にできるかなと思ったので転載する。 事の経緯 Modelでのバリデーション メリット デメリット データベースでのバリデーション(Unique制約, Not Null制約, Check制約等) メリット デメリット テ…

CircleCIでdocker-composeを起動してテストを実行

ようやく、CircleCIにてdocker-composeを使ってテストを流して問題なく終了するようになったので、そのためにやったことを書いておきます。 これまでの経緯は過去の記事を参照のこと。 patorash.hatenablog.com patorash.hatenablog.com patorash.hatenablog…

docker-composeでseleniumを使っててChromeがクラッシュする際に対処法について

先日こんな記事を書いていました。 patorash.hatenablog.com この記事では、Capybaraの設定について取り上げていたのですが、CapybaraがInvalid session idのエラーを起こす原因については特定できていませんでした。おそらくメモリが不足しているから、とい…

第22回岡山Ruby,Ruby on Rails勉強会で登壇してきた

昨日になりますが、約2年ぶりに岡山Ruby,Ruby on Rails勉強会が開催されました。 そんなに間が空いてたかな…と思ったけれど、確かに空いてた。 今回は、登壇者として申し込んでいました。 自分の発表 追記 資料を作るに当たって 他の発表について パズルで学…

docker-composeでseleniumを使っている際のCapybaraの設定について

以前にこんな記事を書きました。 patorash.hatenablog.com 今回はこれの続きみたいなものです。 まだCircleCIでのテスト実行まで至らず、ローカルでテストが全部通ることを目標に調整中です。 featurespec以外のテストは完走したので、問題はfeaturespecのみ…

Macで開発環境のDocker化に取り組んでいるので一旦まとめる

MacでRailsアプリを開発しているとなぜかセグメンテーション違反が起きまくって開発に支障が出てきたので、開発環境を全部Dockerに載せてしまおうと思ってここ2週間くらい取り組んでいます。 とりあえず、CircleCIのテスト以外はちゃんと動くようになったか…

MacのRails開発環境でやっぱりセグメンテーション違反起きた

以前にこういう記事を書きました。 patorash.hatenablog.com しかし、PostgreSQLではセグメンテーション違反は起きなくなったのですが、Redisに接続する箇所で起きるようになったので、抜本的な問題解決にはなりませんでした。 ということで、私の中でMacでR…

pgのバージョンを0.21.0にしたらセグメンテーション違反が起きなくなった

少し前に、Railsを起動するとセグメンテーション違反が起きたが、原因がわかった的な記事を書いてた。 patorash.hatenablog.com これで落ち着いたかと思いきや、全然落ち着いておらず、またもやセグメンテーション違反が起きた。シングルプロセスでアクセス…

Rails 6のCredentials方式をRails 5.2にバックポートした

私が担当している製品の機密情報の管理は、Rails 5.1で導入されたEncrypted Secrets(secrets.yml.encを使う方式)を使っていて、5.2になって導入されたCredentials方式の導入は見送っていました。 理由は、5.2のCredentials方式だと、各環境毎の設定が行えな…

Macでrails起動時に発生したセグメンテーション違反の原因がわかった

過去に、こんな記事を書いていました。 patorash.hatenablog.com ずっと騙し騙し、gemの再インストールをしながら使っていたのですが、いよいよresqueがまともに動かないときが頻発したので、ちゃんと調査を開始。 ちなみにこの記事を書いている時点での私の…

mutationでバルク処理をする場合のアプローチ

mutationでデータを更新するGraphQL APIを作りました。しかしそのAPIが時々しか呼ばれないならいいのですが、頻繁に何度も呼ばれるケースだとAPIのへのアクセスが複数回になり無駄が多いので、バルクアップデートみたいなことはできないか?と指摘を受けまし…

Mojaveでrailsを起動するとpgでセグメンテーション違反になる場合がある

追記 Macの不具合が原因らしいことを突き止めたので色々やったら直ったぽいのでリンクを貼っておきます。 patorash.hatenablog.com 以下、元々の記事 開発マシンを新しいMBPに変えたと同時にMojaveになっていたのですが、そこで開発していると、時々Railsが…

Herokuでpuma_worker_killerを適切に設定する

昨年、こんな記事を書いていました。 patorash.hatenablog.com これで設定できていたと思ったのですが、アクセスが集中したときにワーカーの再起動が起きず、スワップが発生してR14(メモリ関連のエラー)が頻発していました。このときに行った設定はどうも一…

RailsにPR送ったらマージされた

Railsに含まれているgem web-consoleに自分のPRが取り込まれた github.com 感動を残しておくためにブログに書いとく。 事の始まり 先日、Rails 6.0.0 rc1でrails newして、ごにょごにょと進めていたら、ログに以下のメッセージが出ていた。 Cannot render co…

RubyでUTF-8のCSVをExcelに変換するコマンドを作った

お客様や社内の他の部署のメンバーとファイルのやりとりをすることってあると思うのですが、いつも大変なのが、CSVファイル。HerokuのDataclipsがバージョンアップされてExcel形式でダウンロードできなくなったので、仕方なくCSVでダウンロードして、Excel起…

RubyKaigi2019に参加してきた

元号が令和になりました。GW楽しんでいますでしょうか? さて、10日以上過ぎてしまいましたが、4月18日~20日に福岡で開催されたRubyKaigi2019に参加してきましたのでそのことについて書こうと思います。 弊社からは私を含む3名が参加しまして、岡山から車で…

GraphQLでWebAPIを作っている

自分が担当のプロダクトのWebAPIを整理していかんとほんまヤバいなぁ〜と思いつつ、数年過ごしていましたが、ここ最近で急激にGraphQL熱が湧き上がり、今お試しで実装していってる最中です。 ビビッときたのは、@gfxさんの書かれたGraphQL徹底入門の記事から…

gemのCIをTravisCIからCircleCIに変更した

gem imyouのCIをTravisCIからCircleCIに変更した。 理由は単純で、普段からCircleCIを使っているので、CIの構築がやりやすいから。TravisCIは滅多に使わないのでわからなくなることが多く、それがストレスだった。他のgemもCircleCIに変更していこうと思うが…

Ruby2.6の関数合成で遊んでみた

Ruby 2.6が出て2ヶ月が経過しているものの、まだ触ってなかったので新機能を調べていたら、関数合成ができるようになっていたのを知った。 techlife.cookpad.com これを使えば多少の加工だったらmapを2周したりしなくて済むんじゃないか?と思って実験してみ…

1つのspecファイルをparallel_testsで並列処理する方法

parallel_testsでテストの並列化していくのが好きなのですが、まだまだ課題に思っていたことがありました。それは、テスト対象ファイルがCPUコア数より少ない場合、フルに並列化できないこと…。 つまり、CPUコア数が4つで、テスト対象ファイルが1つの場合、1…

CircleCIからテストが失敗したファイル一覧を取得するRails Runner作った

表題の通りですが、作りました。 CircleCIで失敗したテストをローカルで流したいのだけれど、わざわざCircleCIのページを見に行くのもあれだし、どうせならガバッと実行したいな〜と思ってCircleCI APIを叩いて取得できるんじゃないかな?と思って調査してみ…

ActiveJobのテスト周りの見直しで学んだことのメモ

最近テストが不安定になって、その修正をしていっていたらActiveJobが絡むあたりがまた不安定になったので原因を探ろうとしたのだけれど、ActiveJobのテストの設定周りなんて久々すぎて忘れまくっていたのでここで一旦整理しておく。 テストでActiveJobを同…