ruby on rails - Faye on Heroku: Problemas entre dominios
ruby-on-rails cors (2)
Acabo de recibir mis aplicaciones faye y rails alojadas en heroku comunicándose en la última hora más o menos ... aquí están mis observaciones:
Asegúrate de que tu FAYE_TOKEN esté configurado en todos tus servidores si estás usando una variable env.
Desactivar websockets, que ya has hecho ...
client.disable(...)
no funcionó para mí, utilicéFaye.Transport.WebSocket.isUsable = function(_,c) { c(false) }
lugar .Esto puede o no aplicarse a usted, pero fue lo más difícil de encontrar para mí ... en mi entorno de desarrollo, el puerto en el que se ejecuta mi aplicación se insertará al final del nombre de host especificado para mi servidor faye. .pero esto pareció causar una falla en la comunicación en la producción. Trabajé en eso creando un método broadcast_server_uri en application_controller.rb que maneja la inclusión de un puerto cuando sea necesario, y luego lo uso en cualquier lugar en el que haga girar un nuevo canal.
....
class ApplicationController < ActionController::Base
def broadcast_server
if request.port.to_i != 80
"http://my-faye-server.herokuapp.com:80/faye"
else
"http://my-faye-server.herokuapp.com/faye"
end
end
helper_method :broadcast_server
def broadcast_message(channel, data)
message = { :ext => {:auth_token => FAYE_TOKEN}, :channel => channel, :data => data}
uri = URI.parse(broadcast_server)
Net::HTTP.post_form(uri, :message => message.to_json)
end
end
Y en mi aplicación javascript, que incluye
<script>
var broadcast_server = "<%= broadcast_server %>"
var faye;
$(function() {
faye = new Faye.Client(broadcast_server);
faye.setHeader(''Access-Control-Allow-Origin'', ''*'');
faye.connect();
Faye.Transport.WebSocket.isUsable = function(_,c) { c(false) }
// spin off your subscriptions here
});
</script>
FWIW, no me preocuparía por establecer Access-Control-Allow-Origin, ya que no parece estar haciendo una diferencia de ninguna manera: veo que XMLHttpRequest cannot load http://...
independientemente, pero esto todavía debería funcionar bien lo suficiente para lograr desbloquearlo (Aunque me encantaría aprender de una solución más limpia ...)
Actualmente estoy alojando tanto mi aplicación Rails como una aplicación faye-server en Heroku. El servidor faye ha sido clonado desde aquí ( https://github.com/ntenisOT/Faye-Heroku-Cedar ) y parece estar ejecutándose correctamente. He desactivado websockets, ya que no son compatibles con Heroku. A pesar del reclamo en el sitio de Faye que:
"Los clientes y servidores de Faye admiten de forma transparente la comunicación entre dominios, por lo que su cliente puede conectarse a un servidor en cualquier dominio que desee sin una configuración adicional".
Todavía me encuentro con este error cuando intento publicar en un canal de Faye:
XMLHttpRequest cannot load http://MYFAYESERVER.herokuapp.com. Origin http://MYAPPURL.herokuapp.com is not allowed by Access-Control-Allow-Origin.
He leído sobre CORS e intenté implementar algunas de las soluciones que se resumen aquí: http://www.tsheffler.com/blog/?p=428, pero hasta ahora no he tenido suerte. Me encantaría saber de alguien que:
1) Tiene una aplicación de rails alojada en Heroku 2) Tiene un servidor faye alojado en Heroku 3) ¡Los dos se han comunicado con éxito entre ellos!
Muchas gracias.
No puedo decir que he usado Rails / Faye en Heroku, pero ¿ha intentado establecer el encabezado Access-Control-Allow-Origin
en algo como Access-Control-Allow-Origin: your-domain.com
?
Para las pruebas también puede hacer Access-Control-Allow-Origin: *
para ver si eso ayuda
Encabezados personalizados
Algunos servicios requieren el uso de encabezados HTTP adicionales para conectarse a su servidor Bayeux. Puede agregar estos encabezados utilizando el método setHeader () y se enviarán si el transporte subyacente admite encabezados definidos por el usuario (actualmente solo sondeos largos).
client.setHeader (''Autorización'', ''OAuth abcd-1234'');
Fuente: http://faye.jcoglan.com/browser.html
Por lo tanto, pruebe client.setHeader(''Access-Control-Allow-Origin'', ''*'');