Sto costruendo un'app Phonegap che utilizza backbone.js e un back-end Rails. Durante la creazione di nuovi utenti, sto ottenendo un errore di CORS correlati:Rails, Backbone, PhoneGap, CORS (non consentito da Access-Control-Allow-Origin error)
sto facendo funzionare il mio PhoneGap web app sul http://0.0.0.0:8000
($ python -m SimpleHTTPServer), e in esecuzione la mia applicazione Rails in webrick su http://0.0.0.0:3000
($ guide del server).
Il problema si verifica quando si tenta di creare un nuovo "spot" in Backbone come questo (console js cromo):
> 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.
Ecco il mio controller di applicazione:
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = 'http://0.0.0.0:8000'
headers['Access-Control-Request-Method'] = 'POST, GET'
end
Ho letto numerosi articoli, e il più lontano lungo ho potuto ottenere è stato quando si modifica il mio routes.rb per includere questo:
match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'}
E nella mia 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
Aggiunta del percorso e il metodo 'cor' consentirà poi me fare salva, ma, avrò lo stesso errore quando l'eliminazione di record.
Ho un'idea di base di CORS, non riesco ad accedere a un server con un dominio diverso da quello dell'origine della mia richiesta. Ma come impostare esattamente questo con Rails, Backbone, PhoneGap, non è chiaro per me. Qualsiasi aiuto sarebbe fantastico, grazie!
+1 per 'match '* all' => 'application # cor',: constraints => {: method => 'OPTIONS'}' – user2503775