Ruby on Railsでクロス

Ruby on Railsでクロス

Ruby on Railsはデフォルトだと自身以外リクエストを受け付けません。
最近はフロントはVue.jsやReactで作ってバックはRailsみたいな構成が当たり前なので、このままだとフロント側からのリクエストを受け付けてくれません。
受付してもらうためにCORS (Cross-Origin Resource Sharing) の設定を行います。

Rack CORSの有効化

Gemfileを開いて以下のコメントを外します。

# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
gem "rack-cors"

Gemfile修正後は以下でインストールします。

> bundle install

cors.rb の設定

config/initializers/cors.rb を開いて設定します。
とりあえず手っ取り早くなんでもかんでも受け付けるようにするには以下です。

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

実験的にはともかく、本番環境で動かす場合はセキュリティ上好ましくないのでoriginsの部分をちゃんと設定するようにします。
たとえば localhost:3000 と localhost:3001、あと https://www.example.com だけ受付する場合は以下のように書きます。

origins 'localhost:3000', 'localhost:3001', 'https://www.example.com'

これでフロント側から呼び出せるようになります。

コメント

このブログの人気の投稿

(真)ESP32の開発環境をVSCodeで作る

ESP32にmicroSD接続

ESP32でデバッグ