2013-08-07 3 views
2

Je rencontre un problème cross-origin resource sharing (CORS) avec mes Rails 3 application consommatrice reste simple, MongoDB api. J'ai quelques CoffeeScript/JavaScript qui tente de consommer le mongodb simple rest api, mais Chrome empêche le message de la console suivante:problème CORS avec Rails 3 consommation mongodb reste api

 
XMLHttpRequest cannot load http://127.0.0.1:28017/my-db/my-collection/. Origin http://127.0.0.1:3000 is not allowed by Access-Control-Allow-Origin. 

J'ai ajouté les deux méthodes de régulation de ce blog post:

before_filter :cors_preflight_check 
after_filter :cors_set_access_control_headers 

def cors_set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = '*' 
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
    headers['Access-Control-Max-Age']  = '1728000' 
end 

def cors_preflight_check 
    if request.method == :options 
    headers['Access-Control-Allow-Origin'] = '*' 
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
    headers['Access-Control-Allow-Headers'] = 'Content-Type, X-Requested-With, X-Prototype-Version' 
    headers['Access-Control-Max-Age']  = '1728000' 
    render text: '', content_type: 'text/plain' 
    end 
end 

Je peux voir les en-têtes sont présents pour ma page Rails. Cependant, cela ne fonctionne toujours pas.

Ma meilleure estimation est que quel que soit le serveur web que le simple repos mongodb api utilise doit inclure les en-têtes, mon application Rails. Quelqu'un peut-il confirmer ou nier?

J'ai aussi lu quelque part que je pouvais utiliser une règle de réécriture de proxy dans nginx. Cependant, cela est un peu fastidieux, d'autant plus que je ne suis pas en cours d'exécution nginx pour le développement, uniquement sur le serveur de production.

Répondre

0

Quels que soient les en-têtes que vous définissez dans Rails ont rien à voir avec les en-têtes envoyés par Chrome pour la demande ajax à MongoDB directement. Vous devez utiliser JSONP pour contourner les problèmes de CORS.

Démarrez mongod avec --rest et --jsonp et Mongod sera configuré de manière appropriée. Ensuite, faites une requête JSONP en utilisant jquery ou quoi que ce soit et cela devrait fonctionner correctement.