首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rufus Scheduler触发的Sinatra事件

Rufus Scheduler触发的Sinatra事件
EN

Stack Overflow用户
提问于 2017-04-18 23:36:50
回答 1查看 206关注 0票数 2

尝试从Rufus调度程序中发送事件会导致以下错误:

代码语言:javascript
复制
{ 70231586340180 rufus-scheduler intercepted an error:
  70231586340180   job:
  70231586340180     Rufus::Scheduler::IntervalJob "2s" {}
  70231586340180   error:
  70231586340180     70231586340180
  70231586340180     NameError
  70231586340180     undefined local variable or method `connections' for main:Object
  70231586340180       picture-frame.rb:31:in `send_event'
  70231586340180       picture-frame.rb:24:in `block in <main>'
...

似乎我不能从Rufus Job中访问connections。我该如何解决这个问题呢?这是我的代码:

代码语言:javascript
复制
require 'sinatra'
require 'rufus-scheduler'
require 'json'


set :server, :thin
connections = []
scheduler = Rufus::Scheduler.new


get '/' do
    erb :index
end

get '/events', provides: 'text/event-stream' do
  stream :keep_open do |out|
    connections << out
    connections.reject!(&:closed?)
  end
end

scheduler.interval '2s' do
    random = (0...8).map { (65 + rand(26)).chr }.join
    send_event('random', { random: random })
end

def send_event(id, body)
  body[:id] = id

  event = "data: #{body.to_json}"
  connections.each { |out| out << event }
end
EN

回答 1

Stack Overflow用户

发布于 2017-04-20 09:12:39

这是一个带有全局变量的版本。

如何将连接放在Sinatra应用程序的上下文中?

对不起,对于这个$connections$scheduler,它是在整个Ruby过程的上下文中进行的,但是对于一个有限的脚本/服务来说,它是可以的。

代码语言:javascript
复制
require 'sinatra'
require 'rufus-scheduler'
require 'json'


set :server, :thin
$connections = []
$scheduler = Rufus::Scheduler.new


get '/' do
    erb :index
end

get '/events', provides: 'text/event-stream' do
  stream :keep_open do |out|
    $connections << out
    $connections.reject!(&:closed?)
  end
end

def send_event(id, body)

  body[:id] = id

  event = "data: #{body.to_json}"
  $connections.each { |out| out << event }
end

$scheduler.interval '2s' do

  random = (0...8).map { (65 + rand(26)).chr }.join
  send_event('random', { random: random })
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43476509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档