2011-11-30 3 views
2

레일, EventMachine 및 async_sinatra를 함께 사용하기위한 환경을 설정하려고하는데 "uncaught"오류가 발생하여 설정이 잘못되었다고 생각합니다. 던지기 : 비동기 ".async_sinatra with Rails EventMachine and Thin

source 'http://rubygems.org' 

gem 'rails', '3.1.3' 
gem 'sinatra' 
gem 'async_sinatra' 
gem 'execjs' 
gem 'therubyracer' 
gem 'eventmachine' 
gem 'rack-fiber_pool', :require => 'rack/fiber_pool' 
gem 'thin' 

이것은 config.ru입니다 :

이것은 내가 내 Gemfile에있는 것은 내입니다

match '/longpoll', :to => LongPoll 
:

require ::File.expand_path('../config/environment', __FILE__) 
use Rack::FiberPool 
run Longpoll::Application 

내 routes.rb 파일에 무엇을이

이것은 내 long_poll.rb 파일입니다.

class LongPoll < Sinatra::Base 
    register Sinatra::Async 

    aget '/longpoll' do 
    body 'Hello world!' 
    end 
end 

이 설치가 작동하지 않는다고 생각하는 아이디어가 있습니까?

편집 : 내가 랙 fiber_pool없이 작업하는 일을 해결되는지 파악

. 누구나 함께 일할 수 있는지 여부를 확인할 수 있습니까?

같은 오류를 범 basic.ru 다른 예 :

thin 그것을 해결로 전환 webrick를 사용할 때 에러를 보았다면
#!/usr/bin/env rackup -Ilib:../lib -s thin 
require 'sinatra/async' 
require 'rack/fiber_pool' 

class AsyncTest < Sinatra::Base 
    register Sinatra::Async 
    use Rack::FiberPool 

    enable :show_exceptions 

    aget '/' do 
    body "hello async" 
    end 
end 

run AsyncTest.new 

답변

2

. 따라서 나는 직접 가정을 확인할 수는 없지만 webrickrack-fiber_pool을 사용하면 문제가 생길 수 있습니다.

#!/usr/bin/env ruby 
# 
require "rubygems" 
require "sinatra/async" 

class AsyncTest < Sinatra::Base 
    set :server, :thin 

    register Sinatra::Async 

    aget '/' do 
    body "hello async" 
    end 

    run! if app_file == $0 
end 

위의 코드는 정상적으로 작동합니다.

0

IMO 이들은 상호 배타적입니다.

랙 파이버 풀은 async.callback을 파이버 결과와 함께 처리합니다. 또한 연결을 유지하기 위해 thin이라고 말하기 위해 throw :async을 처리합니다. async_sinatra도 똑같은 일을 처리합니다. body {}으로 전화하면 async.callback으로 전화합니다. throw :async은 연결을 유지하기 위해 가늘 게해야한다고 생각합니다. 이것이 현재보고있는 문제입니다. async_sinatra가 던지고있다 : async와 rack-fiber-pool은 그것을 잡아 내고 실제 오류라고 생각한다. https://github.com/raggi/async_sinatra/blob/master/lib/sinatra/async.rb#L69

및 랙 섬유 풀은 여기 잡기 :

현재 던지는 async_sinatra 볼 수 있습니다 당신은 모두의 최고의하려면 https://github.com/mperham/rack-fiber_pool/blob/master/lib/rack/fiber_pool.rb#L24

또한 sinatra_synchrony을 확인할 수 있습니다.