Ngrokなどのトンネリングツールを使うときは、 default_url_options をトンネリングURLのものにしたい
ローカル開発中のRailsアプリに外部からのリクエストを届かせる必要があるとき、Ngrokは便利です。
たとえば
といったときです。
通常、Railsでは、url_for
のホスト部などはHTTPリクエストのヘッダー情報から取得して組み立ててくれるのですが、たとえば graphql-ruby のフィールドなど、コントローラー以外で Rails.application.routes.url_helpers.url_for(user)
を使った場合など、 default_url_options
がないとうまくいかないケースもあります。
そんなとき、いちいち config/environments/development.rb
を編集するのは面倒ですし、うっかり変更したままコミットする悲しい事故も起こります。
そこでこんなコードを書きました。
こうしておけば必要なときに default_url_options
を変えることができます。
# config/environments/development.rb Rails.application.configure do # (省略) # echo "https://xxxxxxxxxxxx.jp.ngrok.io" > tmp/default_url_options.txt # bin/rails restart default_url_options_path = Rails.root.join('tmp', 'default_url_options.txt') if default_url_options_path.exist? default_url = default_url_options_path.read.strip uri = URI(default_url) config.hosts << uri.host Rails.application.routes.default_url_options = { host: uri.host, port: uri.port, protocol: uri.scheme } else Rails.application.routes.default_url_options = { host: 'localhost', port: 3000 } end end