どうも、中田です。
最近専らRailsでは画面を作るというより、APIを作るということが多くなってきたので、
クロスドメイン対応を随時入れています。
パッとやるためにメモ残し。
とりあえずこれやっとけ備忘録
Gem
Gemfileにこれを追加します。
gem 'rack-cors', :require => 'rack/cors', group: [:development, :test]
config
development.rbにこれを追加します。
config.middleware.insert_before ActionDispatch::Static, Rack::Cors do allow do origins '*' resource '*', :headers => :any, :methods => [:get, :put, :post, :delete] end end
bundle install
これで桶。
そもそもクロスドメイン?
AjaxでAPIを呼び出す際、クロスドメイン制約というのがあります。
要は 「知らないところから、API呼び出さないでくださいよ」制約です。
知らないところかどうかは、スキーマ、ホスト、ポートが全て同じかという条件で判断します。
http://api.cotegg.com:80
スキーマ:http
ホスト:api.cotegg.com
ポート:80
これが全部同じところからのAPI呼出でないとダメだよというものです。
最近よく、Bootstrapで画面作ってAngularJSでデータ取得、取得先はrailsなんて構成でやってるので
画面側は、http://localhost:80
API側は、http://localhost:3000
なんて感じになります。
画面側からAPI呼び出そうとすると見事にクロスドメイン制約に引っかかっちゃう訳ですよね。
http://localhost:80
なんて知らないところだ!という何とも冷たいあしらひ。。。
プログラムの世界はシビアでありんす。
クロスドメイン突破するようなjqueryがあったりするけど、それはそれ。