Tag: eventmachine

IMAP闲置如何工作?

有人可以向我解释IMAP IDLE的工作原理吗? 它为每个打开的连接分配一个新进程吗? 我可以以某种方式使用eventmachine吗? 我正在尝试使用后台工作者在heroku上的ruby中实现它。 有什么想法吗?

检测应用程序是否作为HTTP服务器启动(rake task,rconsole等)

我正在使用EventMachine和Monetarily来启动e TCP服务器以及我的rails应用程序。 这是从config/initializers/momentarily.rb 。 我的问题是它在我运行rake任务时启动,比如db:migrate 。 我只想在启动HTTP服务器时启动它。 环境无济于事,因为服务器启动和rake任务都在开发环境下。 有没有办法知道应用程序正在运行HTTP服务器而不是其他任何东西? 请注意,不仅是rake任务,如果我运行rails控制台,EM也会启动,这对我的情况来说也是不可取的。

如何从websocket连接握手的头部解码cookie? (ruby)

我在EventMachine.run循环中运行Sinatra应用程序,在我的ws.onopen方法中,我希望检查handshake标头的cookie,以确保传入的请求来自我的webapp的注册用户。 我的Sinatra应用程序包括以下内容: use Rack::Session::Cookie, :key => COOKIE_KEY, :path => ‘/’, :expire_after => 2592000, #30 days :secret => COOKIE_SECRET 我的ws.onopen方法看起来像这样(修剪) ws.onopen { |handshake| cookie, bakesale = handshake.headers[‘Cookie’].split(‘=’) rack_cookie = Rack::Session::Cookie.new(MyApp, { :key => COOKIE_KEY, :path => ‘/’, :expire_after => 2592000, #30 days :secret => COOKIE_SECRET }) decoded = rack_cookie.coder.decode(bakesale) puts “decoded: #{decoded}” } cookie的值与我的COOKIE_KEY匹配就好了,但是decoded的值是nil 我该如何解码传入的cookie数据? – […]

创建数据库时出现Rails / Ruby错误:无法加载EventMachine C扩展

更新: eventmachine gem已安装在我的gemfile中: eventmachine (1.0.0, 0.12.10) 请帮忙! 尝试使用以下内容创建数据库: Fitzs-MacBook-Pro:twilio_insanity Fitz$ rake db:create’ 返回以下错误: 无法加载EventMachine C扩展; 要使用纯ruby反应器,需要’em / pure_ruby’耙子中止! 无法加载此类文件 – ruby​​eventmachine /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@rails3tutorial2ndEd/gems/eventmachine-1.0.0/lib/eventmachine.rb:8:in require’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@rails3tutorial2ndEd/gems/eventmachine-1.0.0/lib/eventmachine.rb:8:in /.rvm/gems/ruby-1.9.3-p327@rails3tutorial2ndEd/gems/eventmachine-1.0.0/lib/eventmachine.rb:8:in’/Users/Fitz/.rvm/gems/ruby-1.9.3- p327@rails3tutorial2ndEd/gems/thin-1.5.0/lib/thin.rb:7:in require’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@rails3tutorial2ndEd/gems/thin-1.5.0/lib/thin.rb:7:in /lib/thin.rb:7:in’/Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:68:in require’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:68:in block require’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:68:in (2级)in require’/ Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:66:in each’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:66:in在require’/Users/Fitz/.rvm/gems/ruby-1.9.3-p327 each’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:66:in块中@ global / gems / bundler-1.2.3 / lib / bundler / runtime.rb:55:在each’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:55:in each’ /Users/Fitz/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib/bundler/runtime.rb:55:in […]

使用sinatra流API的异步请求

我使用async_sinatra gem来实现异步路由,但我在某个地方发现了一个post,说可以使用Sinatra的流API来代替async_sinatra 。 可以使用流媒体实现以下相同的function吗? require ’em-hiredis’ require ‘sinatra/async’ class App < Sinatra::Base register Sinatra::Async def redis @redis ||= EM::Hiredis.connect end aget '/' do redis.blpop('abcdef', 15). callback {|x| body "x=#{x}"}. errback {|e| body "e=#{e}"} end run! if app_file == $0 end

如何从Rails控制器推送到Faye Server?

我有这个代码: def create message = Message.new(text: params[:message][:text], author: params[:message][:author]) if message.save render json: {result: ‘success’} else render json: {result: ‘failure’} end end 我有客户订阅了Faye Server: var subscription = client.subscribe(‘/foo’, function (message) { getMessages(); }); 我想在创建消息时向Faye发布一些消息。 如Faye Ruby Sever文档中所列,我必须这样做: require ‘eventmachine’ EM.run { client = Faye::Client.new(‘http://localhost:9292/faye’) client.subscribe(‘/foo’) do |message| puts message.inspect end client.publish(‘/foo’, ‘text’ => ‘Hello world’) […]

你如何在Rails应用程序中“生成”一个EventMachine?

我有一个Rails应用程序,我希望为它添加某种WebSocket支持。 从各种Google搜索,似乎最好的基于Ruby的WebSocket解决方案是在EventMachine上运行的em-websocket 。 我想知道是否有办法将EventMachine反应器“集成”到Rails中? 我在哪里放置初始化代码? 这是实现这个目标的正确方法吗? 我已经看到这个回到Sinatra的例子来做一个EventMachine GET请求,但这并不是我想要的。 任何帮助表示赞赏。

Rails – 无法运行app:无法加载EventMachine C扩展;

当我在Lion OS X上运行应用程序时,我收到此错误: Unable to load the EventMachine C extension; To use the pure-ruby reactor, require ’em/pure_ruby’ /Users/adam/.rvm/gems/ruby-1.9.2-p290/gems/eventmachine-1.0.0/lib/eventmachine.rb:8:in `require’: no such file to load — rubyeventmachine (LoadError) from /Users/adam/.rvm/gems/ruby-1.9.2-p290/gems/eventmachine-1.0.0/lib/eventmachine.rb:8:in `’ from /Users/adam/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require’ from /Users/adam/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require’ from /Users/adam/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each’ from /Users/adam/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require’ from /Users/adam/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each’ from /Users/adam/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require’ from […]

使用Web套接字进行点对点文件共享

这是一个理论问题,但是,我需要为我的基于Web套接字的聊天应用程序添加文件共享function。 我可以使用像Amazon S3这样的服务通过发布文件的链接来上传要共享的文件,但这涉及上传可能已经可以通过本地网络访问的文件(例如,在同事之间共享文件) 。 所以我认为有可能通过现有的Web套接字连接以某种方式隧道上传/下载/传输。 但是,我对HTTP文件传输知之甚少,不知道如何实现它的下一步。 Web套接字是否存在限制,以防止这种情况发生? 我正在使用Ruby和EventMachine来实现我当前的Web套接字。 如果您能够提供高水平的概述以帮助我入门,那将非常感激。