rhanda | 元銀行員Web系エンジニアの日記

実務未経験からWeb系受託開発企業に転職したひよっこエンジニアが覚えたことや日々の感情を残すブログ

デプロイしていたRailsアプリケーションでThe change you wanted was rejected.が出た

当該エラー

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.スクリーンショット 2021-03-08 11.20.07.png



解決プロセス

CSRF対策説

とりあえずエラー文でググって、複数タブ・端末でのログインが原因との記事をいくつか発見。 確かにPCとiPhoneの両方からアクセスしていたので、共にタブやクッキーまで削除してリトライしましたが変わらず。

ここでログを見ましたスクリーンショット 2021-03-08 11.16.24.png

②バージョン相違説

最終行のblock in spawn_threadに目が行き、ググってみるとrack・rails・pumaのバージョンを合わせたところ解決したとの事例を発見。しかし調べると全て合っていました。🤔


③ルーティング間違い説

同時にルーティングでの解決事例を発見。しかし開発環境では問題なく動作していることから、そこは関係ないと考えました。



④nginx設定説 ←ここで解決

このタイミングで、エラー文をを見られていないことにやっと気づきました。スクリーンショット 2021-03-08 14.04.04.png

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



まとめ

エラーが出た時に直近で自分がいじっていた物も考えると、良い仮説が立てられるのではないかと思いました。 ログを見て事実情報を集め、仮説を立てて検証というステップが踏むことが大切だと感じました。