Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 SSE/EventSource在第一个数据块(Rails 4&x2B;Puma&x2B;Nginx)后关闭_Ruby On Rails 4_Nginx_Server Sent Events_Puma - Fatal编程技术网

Ruby on rails 4 SSE/EventSource在第一个数据块(Rails 4&x2B;Puma&x2B;Nginx)后关闭

Ruby on rails 4 SSE/EventSource在第一个数据块(Rails 4&x2B;Puma&x2B;Nginx)后关闭,ruby-on-rails-4,nginx,server-sent-events,puma,Ruby On Rails 4,Nginx,Server Sent Events,Puma,我遵循Railscast,这是一个关于服务器发送事件的程序,在我的Rails应用程序中设置了类似的程序。当我只使用puma打开与服务器的连接时,它工作得非常好,但是使用puma+nginx,在发送第一块数据后连接关闭 我还尝试了以下这些问题中提供的解决方案,但它们对我不起作用: 这就是我得到的: 这是,这是我当前的nginx配置: upstream puma { server unix:///home/deploy/apps/outy/shared/tmp/sockets/outy

我遵循Railscast,这是一个关于
服务器发送事件的程序,在我的Rails应用程序中设置了类似的程序。当我只使用
puma
打开与服务器的连接时,它工作得非常好,但是使用
puma+nginx
,在发送第一块数据后连接关闭

我还尝试了以下这些问题中提供的解决方案,但它们对我不起作用:

这就是我得到的:

这是,这是我当前的
nginx
配置:

upstream puma {
  server unix:///home/deploy/apps/outy/shared/tmp/sockets/outy-puma.sock;
  keepalive 16;
}

server {
  listen 80 default_server deferred;

  root /home/deploy/apps/outy/current/public;
  access_log /home/deploy/apps/outy/current/log/nginx.access.log;
  error_log /home/deploy/apps/outy/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;

    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

我将分享有效的配置

nginx

控制器

class StreamController < ActionController::Base
  include ActionController::Live

  def hello
    response.headers["Content-Type"] = "text/event-stream" #; charset=utf-8"

    10.times {
      response.stream.write("data: Hello World!!\n\n")
      sleep 1
    }
  rescue IOError
    puts "Stream IO Error"
    logger.info "Stream IO Error"
  ensure
    puts "Stream closed"
    logger.info "Stream closed"
    response.stream.close
  end
end

你解决了你的问题了吗?@arturtr没有,我仍然无法解决这个问题。在这个回答中,nginx配置中的关键行是“proxy\u http\u version 1.1;”,其余是可选的,至少在我的设置中是这样的
class StreamController < ActionController::Base
  include ActionController::Live

  def hello
    response.headers["Content-Type"] = "text/event-stream" #; charset=utf-8"

    10.times {
      response.stream.write("data: Hello World!!\n\n")
      sleep 1
    }
  rescue IOError
    puts "Stream IO Error"
    logger.info "Stream IO Error"
  ensure
    puts "Stream closed"
    logger.info "Stream closed"
    response.stream.close
  end
end
$ curl -i -N http://localhost/stream/hello
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 29 Jul 2015 09:15:43 GMT
Content-Type: text/event-stream
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: no-cache
X-Request-Id: 41e80567-d792-4a48-9ec3-c661aa056081
X-Runtime: 0.062282
Vary: Origin

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!

data: Hello World!!