Simple Rails 4 ActionController::Live示例不使用Apache+;乘客

Simple Rails 4 ActionController::Live示例不使用Apache+;乘客,apache,ruby-on-rails-4,passenger,Apache,Ruby On Rails 4,Passenger,我正试图准备将我们的环境迁移到Rails 4,并解决所有问题。遗憾的是,我们目前使用的是Centos 5.5,因此需要跨越一些障碍才能让Rails正常运行。这包括安装Python2.6和node.js以使extjs正常工作 现在我被卡住了。有了一个全新的rails 4.0.2应用程序,我就有了一个简单的ActionController::Live example,可以很好地与Puma一起开发。但在Apache+Passenger的产品中,它根本不会将数据发送回浏览器(Firefox) produ

我正试图准备将我们的环境迁移到Rails 4,并解决所有问题。遗憾的是,我们目前使用的是Centos 5.5,因此需要跨越一些障碍才能让Rails正常运行。这包括安装Python2.6和node.js以使extjs正常工作

现在我被卡住了。有了一个全新的rails 4.0.2应用程序,我就有了一个简单的ActionController::Live example,可以很好地与Puma一起开发。但在Apache+Passenger的产品中,它根本不会将数据发送回浏览器(Firefox)

production.rb具有

config.allow_concurrency = true
下面是index.HTML中的HTML/JS

<script>
jQuery(document).ready(function(){
   var source = new EventSource("/feed");
   source.addEventListener('update', function(e){
     console.log(e.data);
   });

});
</script>
Apache日志没有显示任何内容。就像它从未连接到服务器一样。另一件奇怪的事情是,命令行中的curl可以工作:

     curl -k -i -H "Accept: text/event-stream" https://10.47.47.44:8446/feed
HTTP/1.1 200 OK
Date: Thu, 27 Mar 2014 16:52:52 GMT
Server: Apache/2.2.20 (Unix) mod_ssl/2.2.20 OpenSSL/1.0.0e Phusion_Passenger/4.0.27
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
X-Accel-Buffering: no
Cache-Control: no-cache
X-Request-Id: 46fca6bb-4c6a-49f4-b0d6-2cbc5f0a63a5
X-Runtime: 0.002065
X-Powered-By: Phusion Passenger 4.0.27
Set-Cookie: request_method=GET; path=/
Status: 200 OK
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/event-stream

id: 0
event: update
data: {"time":"2014-03-27 10:52:52 -0600"}

id: 0
event: update
data: {"time":"2014-03-27 10:52:54 -0600"}

我想这一定是Apache中的某个东西,但我不确定。

当我们想用Rails Action::LiveController推送一些通知时,我们遇到了一些类似的问题,因为该功能是在Rails 4.0中发布的-在使用Puma进行开发时,一切正常,但在生产流中我们没有关闭。这导致流程数量稳步增加。 那时,我们回到了一个不同的解决方案

但就在今天,我又开始了一些关于这个主题的研究(非常有趣,所以由一位Passenger作者回答:),并在这里结束了——就在我读到Phusion Passenger只支持企业版()的并发和多线程之后

具有Apache2 Web服务器集成开源版本的生产环境是否可能不适合Rails直播


老实说,我不知道——但我想让你知道我的想法。

好吧,我终于通过一堆谷歌搜索找到了答案,这让我发现mod_deflate(用于压缩浏览器响应)会干扰文本/事件流等非缓冲响应

查看我的httpd.conf,我发现:

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpg|png|ico|zip|gz)$ no-gzip

# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css

# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9
SetOutputFilter DEFLATE打开所有响应的压缩,使得其余的AddOutputFilterByType指令不必要。这显然是httpd.conf中的一个bug。我删除了这一行,并验证了压缩仍然适用于html页面


现在一切都很好!以及我最初尝试使用的仪表板工具

你查过apache日志文件了吗?很有趣。访问日志中没有任何内容。那么它甚至还没有到达Apache?奇怪的是,它可以从curl命令行工作。那么什么防火墙设置会触发它呢?如果我关闭响应流,那么我就会得到数据。但只有在最后。所以它似乎不是防火墙。它似乎在缓冲。感谢@blueberryfields让我知道我并不孤单。我终于明白了。mod_deflate对于所有干扰非缓冲响应的请求都是打开的。我使用的是开源版本的passenger。问题是mod_deflate,我在下面添加了一个答案。谢谢你的来电。
     curl -k -i -H "Accept: text/event-stream" https://10.47.47.44:8446/feed
HTTP/1.1 200 OK
Date: Thu, 27 Mar 2014 16:52:52 GMT
Server: Apache/2.2.20 (Unix) mod_ssl/2.2.20 OpenSSL/1.0.0e Phusion_Passenger/4.0.27
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
X-Accel-Buffering: no
Cache-Control: no-cache
X-Request-Id: 46fca6bb-4c6a-49f4-b0d6-2cbc5f0a63a5
X-Runtime: 0.002065
X-Powered-By: Phusion Passenger 4.0.27
Set-Cookie: request_method=GET; path=/
Status: 200 OK
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/event-stream

id: 0
event: update
data: {"time":"2014-03-27 10:52:52 -0600"}

id: 0
event: update
data: {"time":"2014-03-27 10:52:54 -0600"}
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpg|png|ico|zip|gz)$ no-gzip

# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css

# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9