Я создаю приложение Phonegap, в котором используется backbone.js и бэкэнд Rails. При создании новых пользователей я получаю сообщение об ошибке, связанной с CORS:
Я запускаю свое веб-приложение PhoneGap на http://0.0.0.0:8000
($ python -m SimpleHTTPServer) и запускаю свое приложение Rails в webrick на http://0.0.0.0:3000
($ rails server).
Проблема возникает при попытке создать новый "Spot" в Backbone следующим образом (консоль 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
Я прочитал множество статей, и самое далекое, что я смог продвинуть, было при изменении моего route.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, мне непонятно. Любая помощь будет потрясающей, спасибо!
match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'}
- person user2503775   schedule 22.10.2013