2012-12-17 6 views
6

Bu backbone.js ve bir Rails arka uç kullanan bir Phonegap uygulaması yapıyorum. ($ Sunucusu raylar) Ben http://0.0.0.0:8000 benim PhoneGap web uygulaması çalıştırıyorumRaylar, Omurga, PhoneGap, CORS (Access-Control-Allow-Origin hatası tarafından izin verilmiyor)

($ python -m SimpleHTTPServer) ve http://0.0.0.0:3000 tarihinde WEBrick benim Raylar uygulama çalıştırıyor: yeni kullanıcılar oluştururken, bir CORS ilgili hata alıyorum. Sayısız okudum

def set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = 'http://0.0.0.0:8000' 
    headers['Access-Control-Request-Method'] = 'POST, GET' 
end 

: Burada

> 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. 

başvurum denetleyicisi şudur: Bu (krom js konsoluna) gibi omurga içerisine yeni bir "Spot" oluşturmaya çalışırken

sorun olmuyor makaleler ve uzak boyunca elimden bu içerecek şekilde benim routes.rb değiştirirken edildi olsun:

match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'} 

Ve rotayı sonra beni olanak sağlayacak 'cor' yöntemi ekleme benim 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 

kayıtları silerken aynı hatayı olacak kaydeder, ancak.

CORS'in temel fikrini alırım, isteğimin kaynağına göre farklı bir etki alanına sahip bir sunucuya erişemiyorum. Ama bunu Rails, Backbone, Phonegap ile nasıl ayarlayacağım tam olarak belli değil. Herhangi bir yardım harika olurdu, teşekkürler!

+0

+1 Eşleşme için * all '=>' application # cor ',: kısıtlamalar => {: method =>' OPTIONS '} ' – user2503775

cevap

2

this article (bölüm "CORS in Rails") bölümünü takip ediyorum ve benim için çalışıyor.

if request.method == :options değerini if request.method == 'OPTIONS' olarak değiştiriyorum ve headers['Access-Control-Allow-Methods'] adresine PUT, DELETE yöntemlerini ekleyin. Access-Control-Allow-Origin içinde '*' imzalıyorum localhost: 8080 (uygulamanızı nginx'te çalıştırıyorum).

Bu yardımcı olacaktır umarım.

PD: Uygulama denetleyicinizde filtreler (kancalar) var mı?

+0

+1 – MurifoX

İlgili konular