2014-01-21 3 views
2

나는 Faye에 빌드 된 Private_Pub 보석을 사용하고 있으며, 나는 이것을 발견 한 blogthe project에 의해 제공되는 페이에 대해 다른 앱을 사용하고 있습니다. Faye가 앱에서 실행되고 실제 사이트가 다른 앱에서 실행되도록합니다.레일즈 : Faye는 나를 위해 일하지만 아직 알려지지 않은 이유로 콘솔에 몇 가지 JS 오류를줍니다. 걱정해야합니까?

파이어 폭스 콘솔의 오류 :

The connection to ws://xxxxxxxxxxx.herokuapp.com/faye was interrupted while the page was loading. Faye.js 

와 크롬 :

채팅에
WebSocket connection to 'ws://xxxxxxxxxxx.herokuapp.com/faye' failed: One or more reserved bits are on: reserved1 = 1, reserved2 = 0, reserved3 = 0 

(페이) 응용 프로그램 로그 내가 로그이 얻을 :

at=error code=H12 desc="Request timeout" method=GET path=/faye host=xxxxxxxxxxx.herokuapp.com request_id=xxxxxxxxxxx fwd="xxxxxxxxxxx" dyno=web.1 connect=31ms service=30112ms status=503 bytes=0 

어떤 제안 :?

내가 도메인 요청

+0

이 문제도 발생합니다. 해결책을 찾았습니까? – ajbraus

+0

안녕하세요 @ 아내, 예, 해결책을 찾았습니다. :)! 나는 대답으로 지금 그것을 쓸 것이다. – 0bserver07

답변

1

이 문제를 해결하려면 Rails Apps이 서로 액세스하거나 서로 핑한다고합시다. 이를 위해서는 다른 도메인에서 AJAX 요청을 허용하기 위해 CORS과 같은 것을 사용해야합니다. 여기에 접근 방법을 사용하는 간단한 방법은 article입니다. 처음에는 혼란 스러울 수 있습니다.

이것을 수행하려면 Faye에 대한 실제 완전한 앱을 만들어야합니다. 제 질문에 첨부 된 Faye 채팅 서버 Repo에 제공된 것과는 다릅니다.

  • 1 단계 : 페이 응용 프로그램 측

    이 포함 : 실제/메인 앱에서

application_controller.rb

before_filter :cors_preflight_check 
    after_filter :cors_set_access_control_headers 
    #For all responses in this controller, return the CORS access control headers. 
    def cors_set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = 'http://YOURFAYEAPP.com' 
    headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS' 
    headers['Access-Control-Request-Method'] = 'http://YOURFAYEAPP.com' 
    headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization' 
    end 
    # If this is a preflight OPTIONS request, then short-circuit the 
    # request, return only the necessary headers and return an empty 
    # text/plain. 
    def cors_preflight_check 
    if request.method == :options 
     headers['Access-Control-Allow-Origin'] = 'http://YOURFAYEAPP.com' 
     headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS' 
     headers['Access-Control-Request-Method'] = 'http://YOURFAYEAPP.com' 
     headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization' 
     render :text => '', :content_type => 'text/plain' 
    end 
end 
  • 2 단계에서 이것을 포함 application_controller.rb에서 같은 일을하지만 도메인 이름을 th로 변경하십시오. e 원본/실제/메인 레일 앱.

그런 식으로 둘 다 요청을 보내고받을 수 있습니다. parameter 요청 대신 *을 넣지 마십시오. 보안 문제입니다. methodsGetPost으로 줄일 수 있습니다.

2

이것은 또한 내 응용 프로그램에 문제가 있었다 수 있도록뿐만 아니라 application_controllerafter_filter을 추가 한은, Heroku가 30의 시간 제한이 있고 faye.ru/config.ru는 시간 제한이있는 경우 이 오류를 30 개 이상 설정하십시오. 그것을 25 등으로 줄이십시오. faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 25)

+0

다음 명령을 사용하여 양쪽에 웹 소켓을 활성화했습니다. '$ heroku labs : enable websockets -a myapp' 그리고 나서 두 응용 프로그램 모두에 대한 액세스를 허용하기 위해 CORS를 내 응용 프로그램 컨트롤러에 사용했습니다. 채팅과 기본 앱. – 0bserver07