patorashのブログ

方向性はまだない

Ruby on Rails

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

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

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

開発マシンを新しいMBPに変えたと同時にMojaveになっていたのですが、そこで開発していると、時々Railsが全く起動しなくなりました。rails consoleとかは問題ないのですが、rails serverすると落ちる。しかもエラーメッセージがあまりにも長いので、標準エラ…

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…

ActiveRecordのmodel名が〜Typeで終わるものをgraphql-rubyで扱う

なかなか情報がなかったので、書いときます。 model名が◯◯Typeで終わることって、ままあるのかなと思います。CompanyモデルとCompanyTypeモデルのような感じで。これをGraphQLでTypeを定義しようとすると、Types::CompanyTypeとTypes::CompanyTypeTypeになっ…

GraphQLのスキーマ情報からドキュメントを生成する

漠然と考えていたことが既に書かれていたので、非常に参考になったし面白かった。 developer.kaizenplatform.com GraphQL APIの設計を中心にフロントエンド、バックエンドをそれぞれ作っていくと、それぞれの実装待ちが発生しなくてよい。しかもAPI仕様のド…

GraphQLでWebAPIを作っている

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

WSL + Docker for WindowsでRailsアプリを動かしたが遅すぎた

これはノウハウとかじゃなくてただの日記。 この前久々にLenovoのPCを触れたので、Docker for Windowsの設定をして、WSLでdocker-compose upできて喜んでいたが、Railsアプリを起動するところまで時間が取れなかった。昨日ようやく少し時間が取れたのでやっ…

CircleCIにreviewdogを飼うことにした。

Rubocopを一応入れているのに、滅多に動かしてなくてあんまり意味を成していなかった。issueにずっとあったCIにRubocopを取り入れるというやつに着手しようと思ってようやく取り組み始めた。 reviewdogを知る CircleCIのワークフローにRubocopのチェックを入…

Amazon Linux 1でImageMagick6系の最新版を入れる

gem rmagick 3.0.0を入れようとしたら、bundle installのときにImageMagickのバージョンが古いという理由で落ちました。というわけで、ImageMagickのアップデートやります! qiita.com ここに書かれてることをやれば概ね大丈夫かと思いますが、最初CentOS6系…

database.ymlのschema_search_pathにpublicを書いたらあかん

PostgreSQL 11にアップデートしようとしていたときに起きました。 docker imageを11に変更して、CircleCIでテストを流そうとしたところ、bin/rake db:structure:loadで失敗しました。 psql:/home/circleci/workspace/db/structure.sql:15: ERROR: schema "pu…

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

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

Capybara3にアップデートしたらハマったことをまとめる

長いことCapybara2系を使っていた。ようやくCapybara3系にアップデートする暇が取れたので作業に着手したら、めっちゃテスト落ちた…。ので、その原因と対策を書いていく。 whitespaceが含まれるようになった。 以下のブログ記事にも書かれていますが、半角ス…

コンポーネント内でreCAPTCHAを使う場合の注意点

昨日Qiitaに書いたのですが、knockout.jsでreCAPTCHAのURLを貼ってデフォルトの動作に任せると、うまく動きませんでした。 qiita.com 原因はコンポーネントの中で使っているから、コンポーネントの描画が終わる前にreCAPTCHAのデフォルトのonloadイベントが…

CircleCIで前に落ちたテストを先に検証するWorkflowを組んだ

昨日、CircleCIで失敗したテストのファイル一覧を取得するという記事を書きました。 patorash.hatenablog.com 今度はそれを使って、CircleCIで前に落ちたテストを先に検証するワークフローを組みました。 こんな感じです。 CircleCIで再テストを先に行うワー…

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

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

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

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

rake taskで実行確認をとるためにhighlineを使う

highlineという対話式のCLIを提供するgemがあります。 github.com rake taskで検証用データの自動生成を行いたかったのだけれど、検証用なので本番環境で実行されたら困ります。 そこで、本当に実行するか確認を取るようにしたかったので、今回はこれを使い…

Rails 5.2でcacheのkeyにTimeWithZoneを渡すと落ちる件

表題の通りなのですが、テストも通ってよっしゃー!stagingにデプロイじゃー!と意気揚々としたものの、キャッシュを使っている箇所の表示がされない不具合が…。 とはいっても一部だけで全部のキャッシュが動かなくなったわけではなさそう。調べてみた。 ロ…

Rails 5.2からReferrer-Policyの値が設定されているので気をつけよう

Rails 5.1.6.1から5.2.2にアップグレードして検証していたところ、何もしていないのにJavaScriptの処理が壊れた。 その処理はCORSで有料のライブラリをダウンロードしてから実行しており、特にJS側も変更していなかったのだけれど、急にダウンロードできなく…

ニックネームを管理するgem imyou(異名)をリリースした

仕事で使うためにgemを作ったったという話です。 自分が担当している製品は、情報を収集して、それを集計して…みたいなことをよくやるのですが、その時の課題が『表記揺れ』だったりします。よくありますよねー。ASUSのことをどう読むのか?みたいな問題。い…

ActiveRecordのscopeの使い方について後輩に説明した

この前、後輩のPRのレビューを行なっていたら、scopeの使い方に一貫性がなかったので、これは説明資料を作っておいたほうが後々にも使えていいなと思ったので、スライドを作っておきました。 docs.google.com ここ最近プレゼンテーションzenを読んでいたので…

Herokuでpumaを使う。jemallocも使う。

Herokuで稼働しているアプリのApplicationServerをunicornからpumaに変更することにした。 理由は、Capybaraを3系にアップグレードしようとしたところ、デフォルトのサーバがpumaらしく、このまま放っておくとテスト系のライブラリもレガシー化していきそう…

elasticsearch-railsからElasticsearchの設定を変更する方法

Elasticsaerchのインポートを速くしたいと思って現在試行錯誤しているのだけれど、全然速くならなかったので一旦コードを元に戻そうかと思っている。しかし、設定を変更するための仕方を調べるの結構手間取ったので、とりあえずそれだけ残しておく。 Foo.__e…

CircleCIのworkflowを使ってコードのチェックアウト、ライブラリのインストールを共通化した

2019-01-25 追記:CircleCI 2.1を使うとデフォルトで共通化ができるようになっています。 patorash.hatenablog.com 以下より、投稿時の原文です。 私が担当している製品では、RailsのテストをCircleCIで4並列で動かしているのだけれど、これがいちいち各コン…

CircleCIのworkflowを使ってbundle updateのPRを自動化する

以前にHerokuとCircleCIを使ってbundle updateのPRの生成を自動化していました。 qiita.com しかし、最近はCircleCIのworkflowを使えばHerokuを使わずともCircleCIのみで完結しそう!ということだったので調査してみました。 方法が公開されていた circleci-…

Railsのエラー画面の謎挙動にハマッた

Railsのcontrollerで、トランザクションを使っているところで、rescueブロックの処理が書いてあるのにそこに辿り着けていない現象に遭遇しました。 悩んでいることをチャットワークに書いたら、同僚の @kazuhisa1976 さんが、小さいRailsアプリを作って検証…

部分インデックスでミスった話

新たにカラムを追加することになり、その条件が Null許可 ユニークであること ただし論理削除を考慮する となったので、アーハイハイ、部分インデックスですねと思って設定していて、テストもしていたのだけれど、考慮漏れがあったので自戒を込めて書いてお…

RailsアプリにreCAPTCHAを導入した

担当アプリのお問い合わせページが中国からのスパム投稿を行われるようになってしまったので、急遽IP制限を追加して一時的に凌ぐことにしたのですが、完全な対策ではないのでreCAPTCHAを導入することにしました。 reCAPTCHAとは? reCAPTCHAは、Googleが提供…

webpackerでfont-awesome5を使ってみた。

Rails5.1.5で趣味アプリを作っていってるんですが、css frameworkはbootstrap4を使っているのですが、bootstrap4からはどうもアイコンフォントは別で準備されることになったっぽいので、安定のfont-awesome5を使うかーと思ったので入れてみました。 それにし…