のえら

技術備忘とかメモとか.間違いはつっこんでいただきたい所存.

【rails3】POSTしたらルーティングエラーになったけどSSL設定的なものだった

※rails3での話

ssl_requirement
https://github.com/bartt/ssl_requirement
(railsSSLを使えるようにするgem)

起きたこと

特定の path に対して POST を投げたらルーティングエラーになってしまった。
指定している path のルーティングは routes に記述し、rake routesでも確認済みなので、ブラウザの開発者ツールで network を確認したら、指定の path の直後に同じ path に対して GET をかけていた。
確かに、この path に対してルーティング設定で GET は許可していないので、ルーティングエラーになるのは頷ける。
が、GET は意図して動作させていない。。
どこかでリダイレクトがかかっているみたいだったので確認したところ、ssl 接続の設定が絡んでいた。
今回指定した path は ssl_requirement を使用して HTTP で接続すると HTTPS にリダイレクトがかかるように設定されていて、ここのリダイレクトで GET になるためエラーが発生。
開発環境と本番環境でプロトコル変更するようにしておかないと動作確認に影響が出る。。
が、Rails.env.production? などで条件を指定してプロトコル変更するようにするのは微妙。
と思って gem の README をよく読んだらプロトコル切り替えられるようにできていた!

https://github.com/bartt/ssl_requirement#ssl-url-helper

hoge_path を hoge_path(secure: true) に変更して解決。
secureを指定すると、http と https を実行環境によって切り替えてくれる。
※環境設定で、SslRequirement.disable_ssl_check = true を指定している場合