puma hot restarting on_restart函数:Rails应用程序需要什么?

时间:2013-03-19 04:46:27

标签: ruby-on-rails-3 puma

在Puma的配置文件示例中,它为on_restart函数说明了以下内容:

  

重启前运行的代码。此代码应关闭日志文件,   数据库连接等

我是否需要为Rails应用程序实现此功能,关闭与db和日志文件的连接,还是自动处理?如果没有,我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

不,不,Rails负责自动重新加载代码。但是这种代码重新加载支持是有限的。例如,在重新启动应用服务器之前,不会应用对application.rb的更改。

但我会建议{4}}而不是Puma。 Phusion Passenger设置起来要容易得多,特别是当你投入生产时。 Phusion Passenger直接集成到Apache和Nginx中,并提供动态工作者管理等高级功能。 Phusion Passenger非常成熟,稳定,高性能,并被纽约时报,赛门铁克,AirBnB等公司使用。

答案 1 :(得分:0)

我发现每次重新启动Rails / Puma服务器时,使用Redis作为我的Rails.cache提供程序会在第一次请求时导致错误页面。我得到的错误是:

  

Redis :: InheritedError(尝试使用子进程的连接   没有重新连接。您需要在分叉后重新连接到Redis。)

要解决此错误,我没有向 on_restart 添加任何内容,但是必须将代码添加到 on_worker_boot (我正在运行Puma with workers = 4) :

<强> PUMA-config.rb

on_worker_boot do
    puts "Reconnecting Rails.cache"
    Rails.cache.reconnect
end