私はbackbone.jsとRailsバックエンドを使用するPhonegapアプリを構築しています。新しいユーザーを作成しているときに、CORS関連のエラーが発生します。
PhoneGap Webアプリをhttp://0.0.0.0:8000
($ python -m SimpleHTTPServer)で実行し、Railsアプリをwebrick on http://0.0.0.0:3000
($ rails server)で実行しています。
このようなバックボーンで新しい「スポット」を作成しようとすると、問題が発生します(chrome jsコンソール)。
> s = new App.Models.Spot()
(creates Spot)
> s.save()
(returns error Object)
OPTIONS http://0.0.0.0:3000/spots.json 404 (Not Found) jquery-1.8.2.js:8416
XMLHttpRequest cannot load http://0.0.0.0:3000/spots.json. Origin http://0.0.0.0:8000 is not allowed by Access-Control-Allow-Origin.
これが私のアプリケーションコントローラーです。
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = 'http://0.0.0.0:8000'
headers['Access-Control-Request-Method'] = 'POST, GET'
end
私は多くの記事を読みました、そして私が得ることができた最も遠いのはこれを含むように私のroutes.rbを修正したときでした:
match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'}
そして私のapplication_controller.rbで
def cor
headers["Access-Control-Allow-Origin"] = "*"
headers["Access-Control-Allow-Methods"] = %w{GET POST PUT DELETE OPTIONS}.join(",")
headers["Access-Control-Allow-Headers"] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(",")
head(:ok) if request.request_method == "OPTIONS"
end
ルートと'cor'メソッドを追加すると、保存を行うことができますが、レコードを削除するときに同じエラーが発生します。
CORSの基本的な考え方を理解しました。リクエストの発信元のドメインとは異なるドメインのサーバーにアクセスできません。しかし、Rails、Backbone、Phonegapを使用してこれをどのように正確に設定するかは、私にはわかりません。どんな助けでも素晴らしいでしょう、ありがとう!