- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
主要编辑:自从最初发现此问题后,我已将其缩减为以下内容。我认为现在这是对问题的略微更精确的描述。因此,对 OP 的评论可能并不完全相关。
编辑 在 rails/puma 项目中发布的轻微修改版本:https://github.com/rails/rails/issues/21209 , https://github.com/puma/puma/issues/758
编辑 现在用 OS X 和 Rainbows 复制
总结: 当使用 Puma 并运行长时间运行的连接时,我一直收到与跨线程的 ActiveRecord 连接相关的错误。这在消息中表现出来,例如 消息类型 0x## 空闲时从服务器到达
和锁定(崩溃)的服务器。
设置:
mysqld 5.6.25-0ubuntu0.15.04.1
)2.2.2p95(2015-04-13 修订版 50295)[x86_64-linux]
/Rubinius rbx-2.5.8
4.2.3
,4.2.1
)2.12.2
,2.11
)pg-0.18.2
)/mysql2注意,并非以上版本的所有组合都已尝试。第一个列出的版本是我目前正在测试的版本。
rails 新问题测试
get 'events' => 'streaming#events'
streaming_controller.rb
pool: 2
,但使用不同的池大小)代码:
class StreamingController < ApplicationController
include ActionController::Live
def events
begin
response.headers["Content-Type"] = "text/event-stream"
sse = SSE.new(response.stream)
sse.write( {:data => 'starting'} , {:event => :version_heartbeat})
ActiveRecord::Base.connection_pool.release_connection
while true do
ActiveRecord::Base.connection_pool.with_connection do |conn|
ActiveRecord::Base.connection.query_cache.clear
logger.info 'START'
conn.execute 'SELECT pg_sleep(3)'
logger.info 'FINISH'
sse.write( {:data => 'continuing'}, {:event => :version_heartbeat})
sleep 0.5
end
end
rescue IOError
rescue ClientDisconnected
ensure
logger.info 'Ensuring event stream is closed'
sse.close
end
render nothing: true
end
end
美洲狮配置:
workers 1
threads 2, 2
#...
bind "tcp://0.0.0.0:9292"
#...
activate_control_app
on_worker_boot do
require "active_record"
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end
puma -e production -C path/to/puma/config/production.rb
测试脚本:
#!/bin/bash
timeout 30 curl -vS http://0.0.0.0/events &
timeout 5 curl -vS http://0.0.0.0/events &
timeout 30 curl -vS http://0.0.0.0/events
这相当一致地导致应用服务器的完全锁定(在 PostgreSQL 中,请参阅注释)。可怕的消息来自 libpq
:
message type 0x44 arrived from server while idle
message type 0x43 arrived from server while idle
message type 0x5a arrived from server while idle
message type 0x54 arrived from server while idle
在“现实世界”中,我有很多额外的元素,问题是随机出现的。我的研究表明此消息来自 libpq
并且是“通信问题,可能在不同线程中使用连接” 的潜台词。最后,在写这篇文章时,我锁定了服务器,但在任何日志中都没有一条消息。
所以,问题:
或
MySQL
如果运行 MySQL,消息会有点不同,应用程序会恢复(虽然我不确定它是否处于某种未定义状态):
F, [2015-07-30T14:12:07.078215 #15606] FATAL -- :
ActiveRecord::StatementInvalid (Mysql2::Error: This connection is in use by: #<Thread:0x007f563b2faa88@/home/dev/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-4.2.3/lib/action_controller/metal/live.rb:269 sleep>: SELECT `tasks`.* FROM `tasks` ORDER BY `tasks`.`id` ASC LIMIT 1):
最佳答案
警告:将“答案”读作“似乎有所作为”
如果我将 Controller block 更改为如下所示,我看不到问题发生:
begin
#...
while true do
t = Thread.new do #<<<<<<<<<<<<<<<<<
ActiveRecord::Base.connection_pool.with_connection do |conn|
#...
end
end
t.join #<<<<<<<<<<<<<<<<<
end
#...
rescue IOError
#...
但我不知道这是否真的解决了问题,或者只是让它变得极不可能。我也无法真正理解为什么这会有所作为。
将此作为解决方案发布以防万一,但仍在深入研究这个问题。
关于ruby-on-rails - 使用 `ActiveRecord with_connection do` 和 ActionController::Live 时出现线程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535545/
我在使用 jquery 1.9.1 时遇到问题。我已经搜索过,但这些都没有解决我的问题。 $('.sm2_expander').live('click', function() { $
有些 Live CD 可以启动操作系统并允许您无需安装即可使用它。 我想知道是否有一种简单的方法来自定义 Live CD,以便它只加载运行一个应用程序所需的内容,然后运行该应用程序。 最佳答案 对于
当我从 Live CD 启动 Linux Mint 时,我能够将文件保存到“文件系统”。但这些文件保存在哪里呢?不可能是光盘,因为它是 CDR。我不认为它存储在 RAM 中,因为它只能保存这么多数据,
我正在尝试 ZIO . 我不明白为什么要添加Live作为Trait,然后提供一个object,比如: object Live extends Live 在不同的地方可以找到这种模式,例如 zio.co
我正在尝试播放 RTSP 直播流媒体网址“rtsp://164.100.51.207/broadcast/DDLive”。但我收到此错误 (1,-1)。 我正在尝试这段代码 VideoView myV
如何更改标签的 html,如下所示: $('#someId').html('foo bar'); 使用 live() 或 delegate() 函数时?只是为了澄清,我不希望这种情况发生在悬停、焦点或
我在这里没有看到很多关于 Microsoft 提供的 xbox live api 的帖子。谁能给我指一个有活跃的 xbox live api 社区的网站? 最佳答案 这是相当模糊的,所以我会提供一个广
我有一个带有 class="centerMessage" 的 div 。该 div 会在页面加载后的某个时刻插入到 DOM 中。我想更改此 div 上的 CSS 以使其居中。我尝试了下面的CSS功能,
我正在开发一个应用程序,我需要将通过智能手机的摄像机(在 iPhone 和 Android 手机上)捕获的视频流式传输直接到 YouTube Live。 我研究了 Codename One 的 Cap
当使用 DLT 时,我们可以使用 STREAMING LIVE TABLE 或 LIVE TABLE 创建一个实时表,如文档中所写: CREATE OR REFRESH { STREAMING LIV
所以,我在一个网站上工作,我希望用户能够使用他们的 xbox 帐户登录,将他们的玩家标签链接到我的网站。我可以像这样使用 oauth: 但是,我不知道如何获得 xbox live 权限。执行此操作的其
我正在使用苹果的 http 实时流媒体将实时视频流式传输到 ipad/iphone。其中一个重要的步骤是将传输流与播放列表一起分割成几个 ts 段。根据苹果的文档,推荐的 ts 段持续时间为 10 秒
我正在尝试实现“使用 Outlook.com 登录”流程,其中涉及客户端和服务器代码。 流程是: 从客户端将用户重定向到: https://login.live.com/oauth20_authori
如果您使用 YouTube 直播打开广播“事件”,用户可以使用回放功能,让他们无需离开界面即可观看过去 3 小时的广播 - 您可以像观看视频一样轻松观看,但您仍处于广播中,您只需控制过去缓冲的分钟数。
我有一个使用 HTTP Live Streaming 传送视频内容的应用程序。我希望应用程序根据设备屏幕尺寸(4x3 或 16x9)检索适当的分辨率。我运行 Apple 的工具来创建主 .m3u8 播
我有一个使用 HTTP Live Streaming 传送视频内容的应用程序。我希望应用程序根据设备屏幕尺寸(4x3 或 16x9)检索适当的分辨率。我运行 Apple 的工具来创建主 .m3u8 播
super 快的。这是我的 .gitignore(在我的 repo 的根级别 # Makefile stuff LIVE-* .install-post-all 当我这样做时,LIVE-* 位不起作用
因此,我在 Gamasutra 阅读了 John Carmack 的采访,其中他谈到了他所谓的“存在于内存映射文件中的实时 C++ 对象”。以下是一些引用: JC: Yeah. And I actua
在教师端对类(class)进行更改后,有预览更改和查看实时版本的选项,但目前这两个选项都无法正常工作,我们必须在 URL 中附加基本 url (www.abc.com/)是时候预览更改或查看实时版本了
有人可以详细说明aria-live="assertive"之间的区别吗?和 aria-live="polite" ? 据我了解 aria-live="assertive"将获得更高的优先级并清除队列,
我是一名优秀的程序员,十分优秀!