ruby-on-rails - 请求卡在 PG::Connection#async_exec

标签 ruby-on-rails ruby postgresql passenger

我正在尝试使 rails 应用程序在 passenger 下运行,但到目前为止还没有成功。它使用 sequel 连接到 postgresql。随机请求需要太多时间才能完成。我能够找到应用程序将时间花在哪里:

 %self      total      self      wait     child     calls  name
 99.92     65.713    65.713     0.000     0.000        5   PG::Connection#async_exec
  0.00      0.002     0.002     0.000     0.000      264   Set#delete
...

据推测,webrick 不会发生这种情况,我将尝试在 unicorn 下运行它。

这里有一些 related links .

我正在使用 passenger-5.0.30ruby-2.3.0postgresql-9.4pg-0.19 .0rails-5.0.0.1unicorn-5.1.0 也是如此。该应用程序在 lxc 容器中运行。主机和 guest 操作系统是 ubuntu/xenial

最佳答案

问题在我们开始重新建立与数据库的连接后得到解决。我们在项目中使用 sequel,Passenger 仅在使用 ActiveRecord 时自行处理问题。

为了扩展它,默认情况下,Passenger 对 ruby​​ 应用程序使用智能生成。它首先产生预加载器进程,加载框架和所有库。之后,预加载器进程在需要时产生工作进程,处理请求。产生工作进程时,所有文件描述符都从预加载器进程继承。因此,如果您不重新建立与数据库的连接,则所有工作进程共享一个由预加载器建立的连接。这会导致各种奇怪的行为。比如请求花费的时间太长。

在此之前,我们还将处理 WebSocket 连接移到了一个单独的进程中。但是不确定它是否导致了这个问题。

更多相关信息:

Disconnect If Using Forking Webserver with Code Preloading
Unintentional file descriptor sharing
Running the Action Cable server on the same host and port, under a sub-URI

关于ruby-on-rails - 请求卡在 PG::Connection#async_exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044636/

相关文章:

ruby-on-rails - Rails - 确保 www 在 URL 中

ruby-on-rails - 为其他模型设计 after_sign_in_path_for

postgresql - pgadmin 仅返回 1000 行以查询超过 225000 行的表

java - JPA ManyToOne 关系和外表的问题

json - PostgreSQL:将数据从json插入表

ruby-on-rails - 将 rails 应用程序部署到 Heroku 错误 ArgumentError : Invalid option: harmony

javascript - 使用 Ajax 关注或取消关注用户会导致其他链接的 href 发生变化吗?附有图片/示例

ruby - Mechanize 在有效 URL 上返回 500?

ruby-on-rails - 错误 : Error installing rails zeitwerk requires Ruby version >= 2. 4.4

ruby-on-rails - 如何从所有用户的电子邮件中设置用户名?