当該エラー
The change you wanted was rejected. Maybe you tried to change something you didn't have access to. If you are the application owner check the logs for more information.
解決プロセス
①CSRF対策説
とりあえずエラー文でググって、複数タブ・端末でのログインが原因との記事をいくつか発見。
確かにPCとiPhoneの両方からアクセスしていたので、共にタブやクッキーまで削除してリトライしましたが変わらず。
ここでログを見ました
②バージョン相違説
最終行のblock in spawn_thread
に目が行き、ググってみるとrack・rails・pumaのバージョンを合わせたところ解決したとの事例を発見。しかし調べると全て合っていました。🤔
③ルーティング間違い説
同時にルーティングでの解決事例を発見。しかし開発環境では問題なく動作していることから、そこは関係ないと考えました。
④nginx設定説 ←ここで解決
このタイミングで、エラー文をを見られていないことにやっと気づきました。
HTTP Origin header didn't match request.base_url
そもそものヘッダーはhttpなのにhttpsが来ちゃってると言われているのかなと考えました。
(最近にHTTPS設定をしたのでほぼそうだろうと思いました。)
ググってみると、nginxで追記する必要のある設定を発見。
/etc/nginx/conf.d/default.conf
で以下のように設定を追加。
location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Client-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; #この設定を追加 proxy_redirect off; proxy_pass http://puma; }
※X-Forwarded-Proto:https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/X-Forwarded-Proto
sudo systemctl restart nginx.service
でnginxを再起動し解決しました。
(ついでに)vimファイルがread onlyだった
また/etc/nginx/conf.d/default.conf
の内容をvimで書き換えたときに、read onlyが出たのですが、
:w !sudo tee %
で反映させて
:q!
で強制脱出し、変更できました。
(参考記事) https://qiita.com/Catshollic/items/2334f63845d8b0d85bdd http://tm.root-n.com/unix:command:vim:readlonly_write
まとめ
エラーが出た時に直近で自分がいじっていた物も考えると、良い仮説が立てられるのではないかと思いました。 ログを見て事実情報を集め、仮説を立てて検証というステップが踏むことが大切だと感じました。