hau*_*hau 5 ruby-on-rails redis puma
我在rails应用程序中使用全局变量来使用redis gem存储redis客户端.在一个config/initializers/redis.rb,我有
$redis = Redis.new(host: "localhost", port: 6379)
Run Code Online (Sandbox Code Playgroud)
然后在应用程序代码中,我$redis用来处理Redis存储中的数据.
我还使用puma作为生产环境中的Web服务器,并使用capistrano来部署代码.在部署过程中,capistrano重启puma.
每次我启动或重新启动美洲狮网络服务器时,我第一次使用$redisRedis商店中的数据时总是会出现"内部服务器错误" .我看到了错误Redis::InheritedError (Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.)
搜索谷歌和stackoverflow让我认为我需要重新连接到美洲狮分叉子进程后重新连接到Redis.所以,我补充说config/puma.rb:
on_worker_boot do
$redis.ping
end
Run Code Online (Sandbox Code Playgroud)
但我仍然得到了"内部服务器错误" Redis::InheritedError (Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.).
我看过这篇文章http://qiita.com/yaotti/items/18433802bf1720fc0c53.然后我尝试添加config/puma.rb:
on_restart do
$redis.quit
end
Run Code Online (Sandbox Code Playgroud)
那没用.
我试图config/initializers/redis.rb给$redis.ping右后Redis.new.那也行不通.
如果puma在没有运行puma进程的情况下启动,或者在运行puma进程的实例时重新启动,则会出现此错误.
刷新页面会让我超过此错误.但我想在第一次尝试使用时摆脱这种情况$redis.我以为我没有使用redisgem或正确配置它的重新连接.有人能告诉我:
redis在rails应用程序中使用gem 的正确方法吗?redis重新连接连接puma?pumagem文档说,"你应该放置代码来关闭这个块中的全局日志文件,redis连接等,这样它们的文件描述符就不会泄漏到重新启动的进程中.如果不这样做将导致描述符慢慢耗尽,最终服务器多次重启时,模糊的崩溃." 它在讨论这个on_restart块.但它没有说应该怎么做.
这就是我所做的:
Redis.current.client.reconnect
$redis = Redis.current
Run Code Online (Sandbox Code Playgroud)
($redis 是我的 redis 客户端的全局实例)
| 归档时间: |
|
| 查看次数: |
4556 次 |
| 最近记录: |