0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【rails初学者】Rails8でログインページが表示されない問題と406エラーの対処法

Posted at

そろそろ、転職活動に向けてポートフォリオアプリを作成しようと思い、ユーザー管理のために Devise を導入しました。
Rails 8で新しくアプリを作成し、ログインページを作ろうとしたところ、/users/sign_in にアクセスしても画面が表示されず、「406 Not Acceptable」エラーが発生しました。

この問題は、Rails 8から追加されたブラウザ制限機能 allow_browser によるもので、ローカル開発中でも発生するようです。

使用環境

  • Ruby 3.4.2(rbenv)
  • Rails 8.0.2
  • Node.js 18.x(nvm)
  • PostgreSQL
  • Devise

Railsアプリ作成

rails new my_app -d postgresql --css bootstrap
cd my_app

Devise 導入

bundle add devise
bin/rails generate devise:install
bin/rails generate devise User
bin/rails db:create db:migrate

/users/sign_in にアクセス → 406エラー発生

Railsサーバー起動後に以下のURLへアクセスする

http://localhost:3000/users/sign_in

画面は表示されず、サーバーログに以下が出力される。

Rendering public/406-unsupported-browser.html
Completed 406 Not Acceptable

原因:Rails 8 のallow_browserによるアクセス制限

Rails 8では、特定のUser-Agent(古いブラウザや不明なもの)を拒否する
allow_browser機能がデフォルトで有効になっている。

ローカル開発中であっても、IPv6などでアクセスするとUser-Agentが不明とされ、拒否されてしまう。

解決方法

config/environments/development.rbを編集
次の1行をRails.application.configure doブロックの末尾に追加する。

config.action_dispatch.allow_browser = ->(user_agent) { true }

サーバー再起動

# サーバーを停止
Ctrl + C

# サーバー再起動
bin/dev
# または
rails server

再度アクセス

http://localhost:3000/users/sign_in

ログインページが正しく表示されれば成功。

まとめ

内容 対処法
ログインページが406で表示されない allow_browser = -> { true } を追加
修正後も変化なし サーバーの再起動が必要
本番環境では? 特定の古いブラウザだけ除外する設定を推奨
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?