- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个使用 Juggernaut 的 Rails 应用程序定期向客户端推送数据。我使用 Controller Action 来开始推送;但由于推送通常是一个漫长的过程(10 分钟或更长时间),我正在使用 spawn 来 fork 任务。例如:
def start_pushing
spawn_block(:argv => "juggernaut-pushing") do
for x in y
Juggernaut.publish(stuff in here)
sleep(30) # delay before publishing next item
end
end
end
问题是当我点击 start_pushing 操作时,我在日志文件中发现了这个错误:
spawn> Exception in child[27898] - Redis::InheritedError: Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.
所以我在 spawn_block 中添加了以下内容,希望它能解决问题:
require 'redis'
$redis.client.disconnect
$redis = Redis.new(:host => 'localhost', :port => 6379)
它似乎没有修复它,尽管在我添加它以重置 $redis 之前,该操作一直间歇性地工作。我在想,也许重置 $redis 没有做任何事情; Juggernaut 仍在访问旧连接。这看起来有可能吗?我如何确保 Juggernaut 使用新的 Redis 连接?
如果对我所描述的内容有任何疑问,请告诉我。感谢您的帮助,因为我现在被困住了。
最佳答案
问题在于使用全局变量(以 $ 开头的变量)并使用 Passenger。所有全局变量在所有乘客进程中共享。 Redis 有某种检查以确保 redis 调用的进程 ID 与连接的进程 ID 相同。因此,如果 redis 是使用 passenger worker 1 连接的,但随后 worker 2 使用它,则会出现此错误。
有关详细信息,请参阅 Redis::Client 类的方法 connect 和 ensure_connected。
this issue 中解释了解决方案.基本上,他们建议您喜欢 memcache 作为 explained here .
简而言之,在您的 config/environement.rb 中,添加以下内容:
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
# We're in smart spawning mode.
$redis.reconnect
else
# We're in conservative spawning mode. We don't need to do anything.
end
end
end
关于ruby-on-rails - Rails 应用程序 : Reconnect juggernaut redis after forking?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262067/
当我尝试连接到已关闭的主机时,我收到以下消息: cd `sftp://example.com/tmp' [Delaying before reconnect: 30] 每次尝试后,延迟都会增加。我发现
最近我注意到 mysql 连接超时,增加 wait_timeout 对此有所帮助。然而这种情况仍然发生。 我们还启用了 mysqli.reconnect 来 try catch 问题并允许脚本继续运行
我正在编写一个应用程序,它使用 TIdTCPClient 通过套接字与另一个应用程序进行通信。 我希望应用程序尝试连接到某个服务器,直到建立连接(即直到服务器上线)。 为了做到这一点,我编写了以下代码
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
为了解释,我将代码分为几个子部分:(相同范围) 在第 1、2 和 3 部分,任何连接数据库的尝试都会成功。值得一提的是,每个 mysql_close() 都会立即由退出继续。 在第 4 部分,尝试连
如何防止通过重新连接切换连接编码?我的所有设置都是 utf-8,但是因为我在 cli 的 php.ini 中启用了这个功能......我已经测试了任何东西......当我有一个长时间工作的脚本时,然后
Mongoose 'reconnected' 事件在 'close' 事件第二次被触发后不会触发。如何增加始终重试的时间? close:在我们断开连接并在所有这些连接模型上执行 onClose(之后,
我是这方面的新手,我在 Azure ML 工作区中遇到了一些问题。我从终端运行了 python 代码,然后打开另一个终端来检查进程。我在检查进程的终端中收到以下消息: 这是什么意思?它一直在运行,但我
我在 node.js (Express) 应用程序中使用 Javascript SDK。 连接用户工作正常,但连接不会在页面重新加载之间持续存在。这是默认行为,还是用户应该在新请求中保持联系? 我是否
我在 node.js (Express) 应用程序中使用 Javascript SDK。 连接用户工作正常,但连接不会在页面重新加载之间持续存在。这是默认行为,还是用户应该在新请求中保持联系? 我是否
如果我先启动服务器,然后启动客户端,一切都会正常,但是当我先启动客户端,然后启动服务器时(确保客户端能够在 svr 崩溃时连接,然后再次上线),客户端确实连接到服务器,但 2.3 秒后它抛出 Sock
如果连接丢失,如何设置 asterisk 服务器重新连接到远程 MySQL 服务器?带有 odbc 支持的 Asterisk 1.8.32.3 最佳答案 Asterisk 有 cdr 和实时连接。两者
我是 iOS 新手,刚开始使用它。我正在尝试实现网络可达性以检测网络何时断开连接以及何时通过使用第三方类恢复。我能够检测到网络丢失,但我无法检测到网络断开连接后何时恢复。我正在使用以下条件来检查工作正
我不自动加载数据库,因为我的应用程序的大多数页面不需要需要数据库处理,否则整个过程会变慢。我想要做的是在已经存在一个连接时不建立与 db 的新连接,而是使用它而不是打扰 server-db。那么我如何
我在客户端有以下代码: socket.on('reconnect', function() { alert("Reconnected!"); }); 文档说: 事件:“重新连接”成功重新连接后
在脚本运行一定时间后,我在 Ruby 中遇到“mysql 已消失”错误。 我想尝试告诉 mysql gem 在连接丢失时自动重新连接。 我当前的代码如下所示: def self.connect()
我正在尝试使用 retrievePeripheralsWithIdentifiers: 方法尝试连接到之前连接的外围设备。只有当外围设备在 iOS 设备附近时,连接尝试才会成功。 现在,我如何确定已知
ZooKeeper FAQ告诉 ZooKeeper 对象必须在状态变为 SESSION_EXPIRED 时重新创建。 是否有任何代码示例可以正确执行此类重新连接? zookeeper 发行版中的 re
我的 node-js 应用程序使用 bitfinex-api-node npm 包建立 websocket 连接以从 Bitfinex 加密货币交易所接收数据。 不幸的是,几个小时后连接悄无声息地中断
我正在开发一个多数据库系统。系统会集成客户端本地的mssql服务器。 我会将凭证信息存储在我的主数据库中。我想将一些表迁移到我的客户本地数据库。 如您所知,我们可以选择如下连接。 Schema::co
我是一名优秀的程序员,十分优秀!