パパエンジニアのアウトプット帳

30歳に突入した1児のパパエンジニアのブログ

Rails

Railsアプリを型チェックできるようにSteepに入門してみた

今年も残り少なくなってきて、そういえばRailsアプリに型チェックを導入してみたいなーと思っていたのを思い出したのでSteepに入門してみた。 RailsアプリへのSteep導入は神速さんのブログがすごく丁寧だったのでそれを参考にしてやった sinsoku.hatenablog.…

ActiveJob::TestHelperでセットされるTestAdapterを無効にしたい場合

下記のように ActiveJob::TestHelperをincludeしているとqueue_adapterが強制的にTestAdapterになります。 [spec/rails_helper.rb] RSpec.configure do |config| config.include ActiveJob::TestHelper end RSpecのJobのテストとかを書く分には便利なアサー…

RailsでPostgreSQLのVIEW定義を管理する

初めてちゃんとPostgreSQLのVIEWを使うので、Railsで使う場合の調査。 下記のgemを利用するのが定番みたい。 github.com このgem使うと何が嬉しいのか RailsガイドにもCREATE VIEWする方法が書かれてる。 railsguides.jp gem利用しないとCREATE VIEWする生SQ…

RailsでenumerizeのカラムをSTIとして使う

これのenumerize版。 qiita.com 既存のモデルを分けたかったので、参考にさせてもらった。 すでにenumerizeの利用しているカラムをSTIのカラムにしたかったので、inheritance_columnでのSTIのデフォルトカラム(type)を変更もした。 class Payment < ActiveRe…

solidusの画像アップロードができない時

solidusを触り始めら商品の画像アップロードがspoofed_media_typeエラーでできなかった。 でコンソールには下記のようなログが出ていてfileコマンドを実行しようとしているけどないのでcontent type取れずにエラーになっているっぽい。 [paperclip] Content …

RailsのActiveRecord保存時にtimestamp(created_at,updated_at)が自動更新されないようにする

結論は下記なんだけど。 # Rails5以上 book.save(touch: false) # Rails4以下 ActiveRecord::Base.record_timestamps = false どうも古くからRailsをやっているからかsaveのtouchオプションが全く出てこず、record_timestampsの方でゴニョゴニョしたので下記…

has_oneのbuildはhas_manyと違う

Railsでhas_many :commentsみないな時にbuildするときは@blog.comments.buildだけど、has_oneの場合は.buildはnilエラーになる。 has_oneの場合はbuild_xxxというメソッドがあるので、そちらを使うと言うことを今頃になって知った。 class Blog has_one :sta…

初gemを作成した

Logrageを利用していてActiveJobのログも出力したかったのでgemを作った。 github.com gem作成から公開までをやったのは初めてだったのですごくドキドキだったけど、やったみて良かった。 なんで作ったの? Logrageは下記のようにaction_controllerに対してL…

ActiveJob with sidekiqでリトライをしないようにする

非同期処理のど定番のsidekiq。 それをActiveJob経由で使っている場合は、sidekiq_optionsが使えないので細かな設定ができない。 今回、sidekiqにするにしたがってリトライは現時点では全てのジョブで不要なので、リトライしないようにしたかった。 結論とし…

Capybara::Poltergeist::StatusFailErrorが出たら

このエラーはローカルで Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: 1) のようにpoltergeistのtimeoutをすごく短くすると同様のエラーになる。 原因はassets compileに時間がかかっていてタイムアウトしている説らしい。 とりあえず…

今さらjquery-railsがcsrfトークンをいい感じにしてくれていたことを知った

RailsでPOSTなどするときはCSRFのチェックが行われるのでトークンを送る様にしないといけないのだけど、axiosとかで自分でajaxリクエスト投げる時はちゃんとcsrfトークンを付与しないと行けなくて面倒だなーと思っていた。 その時、そういえばなんでRailsでj…

Rails4.2から5.1へアップグレードした

お仕事で関わっているRailsアプリを4.2から5.1へアップグレードした。 もうRails4系から5系へのバージョンアップをやったブログとかかなりあるのでアレだが、 初めて自分もRailsのメジャーバージョンアップの対応をやったのでメモとして残そうと思う。 所感 …

【訂正】Rails5.1のconfig.load_defaultsを利用しているとconfig/initializers/new_framework_defaults.rbの値は上書きされない(activerecord-session_store利用時)

訂正しました (2017/10/18) どうやら、上書きされないのではなくて、下記の現象が起きていたようです。 [Rails]... | 日々雑記 まだどれが影響を与えているのかわかってないですが、他のRailsアプリだとちゃんと上書きされていました。。。 このアプリだけな…

Railsのinculudesについて

以前は普通にincludesを使っていたけど、includes(:books).references(:books)みたいに書くようになってからちょっと疑念を抱いていた。 そして、確かr7kamuraさんのamakanの実装についての記事でpreloadとかを使っていて、やっぱりpreloadやeager_loadを明…

cancancaでAbilityクラスにcurrent_user以外の引数を渡す方法

Cancan(Cancancan)使ってて、今までは下記みたいにuserさえあればよかったけど、ある時sessionのある値をAbilityクラスに渡したくなった。 class Ability include CanCan::Ability def initialize(user) ←(user, other_param)みたいにしたい! ・・・ end en…

react-railsとreact_on_railsについてのメモ

個人用の調べたことや思ったことメモ。 RailsでReactを利用するのに使われる2大Gem。 どちらもSSRに対応している。 webpackerでreactやるんではダメなん? webpacker:install:reactのこと。 やれなくはないと思う。 しかし、今回はSPAではなく一部分に導入(…

Railsのwebpackerでbin/webpack-dev-serverをした時にinvalid host headerになってしまう

Railsのwebpackerでbin/webpack-dev-serverをしてブラウザからアクセスするとinvalid host headerとJSのエラーになってしまった。 (Virtualboxに開発環境を作ってホストOSのブラウザからアクセスしている) とりあえず、下記の設定を入れてエラーを回避してい…

HerokuのRailsでnpm installをできるようにする

1. 下記の手順に従ってrubyとnodejsのビルドパックを追加する devcenter.heroku.com $ heroku buildpacks:add --index 1 heroku/nodejs Buildpack added. Next release on アプリ名 will use: 1. heroku/nodejs 2. heroku/ruby Run git push heroku master t…

administrateでacts-as-taggable-onと連携できるようにする

最近、管理画面をadministrateで作ってみたが、 acts-as-taggable-onが設定されたモデルをうまく表示する方法が分からなかった。。 試行錯誤の結果、一応できるようになったのでメモとして残す。 やったこと app/dashboards/xxx_dashboard.rbにtagsをField::…

herokuでridgepole用のDB設定をする

まあ、下記にある通りなんだけど。 www.wantedly.com herokuのpostgresqlのDATABASE_URLは下記のような形式になっているので、config/database.ymlをそれように変更する。 postgres://username:password@hostname:5432/db_name

activeadminでログインにDeviseではなくSorceryを利用する

管理画面をサクッと作成できるactiveadminで、ユーザ認証にDeviseではなくSorceryを利用したのでその手順を紹介。 ※前提としてactiveadminは導入済みとします 1. sorceryをインストール Gemfileにsorceryを記述して、bundle install [Gemfile] ・・・ gem 's…

jquery.validate.jsで2つあるsubmitボタンの内の1つのバリデーションを無効にする

もともと変更を行うformを作成していたが、そこで追加で別submitボタンで追加したかった。 ただ、何もしないと新しく追加した方のsubmitボタンを押してもvalidate.jsの入力チェックが効いてしまう。 ※新しく追加した方は入力チェックをしたくない validate.j…

【メモ】Railsでassetsパスやautoload_pathsの確認方法

毎回調べて同じサイトを見ている気がしたので、メモとしてまとめておく。 rails c # assetsパスの確認 > Rails.application.config.assets.paths # autoload_pathsの確認 > ActiveSupport::Dependencies.autoload_paths qiita.com kotaroito.hatenablog.com

to_s(:delimited)

数値を3桁区切りにするのをnumber_with_delimiter以外にto_s(:delimited)でできるの初めて知った。良い。 qiita.com

Sorceryでアレやりたい場合メモ

Railsでユーザ認証にDeviseではなくSorcery使ってる場合にアレ(招待機能とか)どうやるの?の参考サイトメモ。 招待機能 qiita.com ユーザ名でログイン dev.classmethod.jp OAuth qiita.com APIサーバー認証 nirasan.hatenablog.com 番外編(2016/08/19 追加…

Arelの拡張

ここまでするか?と思わなくもない。 github.com

dependent: :restrict_with_errorのI18n対応にちょっとつまずいた

dependent: :restrict_with_errorを利用した時に、エラーメッセージを日本語化しようとしてちょっと調べたのでメモとして残す。 ちなみに、dependentオプションについては下記がまとまってて分かりやすい。 qiita.com 例えば下記のようなモデルがあったとす…

RailsでのSI開発にRidgepoleは相性がいいのではないだろうか?

仕事でRailsでのSI開発を行っているのですが、毎回悩みの種の1つにDBのMigrationがあります。 SI開発の性質上、どうしても下記のドキュメントが必要であることが多いです。 テーブル定義書 ER図 仕事では、これらを作成するツールとして下記のA5:SQL Mk-2を…