rescue_from CanCan::Unauthorized, with: :render_403 rescue_from Exception, with: :render_500 if Rails.env.production? render_500 の中ではエラーをメールで飛ばす処理とかが実装されているので、本番だけ動かすようにしていました。この指定で、開発環境では CanCan::Unauthorized は正しく render_403 で拾うことができました。 ただ、このコードを production に載せると問題が発生しました。 CanCan::Unauthorized は render_500 に行ってしまうのです。「テストも通っていたのになぜ……」と悩みましたが、どうやらこの指定は後に指定したものが優先されるようです。上記の指定では、 if Rails.env.prod