【发布时间】:2011-08-29 09:32:16
【问题描述】:
我正试图了解使用 Sinatra 在 Heroku 上运行 eventmachine 所涉及的异步模式。简而言之,我想要实现的是:使用 em-http 创建对 twitter 流 api 的 http 请求,在 stream 回调上,解析和推送使用 websockets 向客户发送推文。到目前为止,一切都很好。当同一个应用程序也需要提供网页服务时,就会出现问题。在我的 config.ru 中,除了其他 Bundler 的东西,我还有,
require 'app'
run TwitterApp
然后在我的应用文件中,EM 块:
EM.run{
class TwitterApp < Sinatra::Base {
get '/' do
haml :index
end
}
http = EventMachine::HttpRequest.new(url, options).get :head=>{'Authorization' => [USERNAME, PASSWORD]}
http.stream do |chunk|
#parse tweet, push using websockets
end
}
现在,似乎正在发生的事情是 run TwitterApp 永远不会到达,因为 EventMachine 使用 Reactor 模式并且永远不会返回。
或者,如果我尝试做一个
App.run!
在 EM.run 块中,一切都在本地运行良好并使用 ruby app.rb 运行,但使用 rackup 似乎运行服务器两次(一次使用瘦另一个使用 WEBrick),在 Heroku 上它崩溃了
Error R11 (Bad bind) -> Process bound to port other than $PORT
Stopping process with SIGKILL
我在这里错过了一些非常琐碎的事情吗?
非常感谢!
【问题讨论】:
标签: heroku sinatra eventmachine