Sự cố đã được giải quyết sau khi chúng tôi bắt đầu thiết lập lại kết nối với cơ sở dữ liệu. Chúng tôi đang sử dụng sequel
trong dự án và Hành khách tự xử lý vấn đề chỉ khi ActiveRecord được sử dụng.
Để mở rộng nó, theo mặc định, Hành khách sử dụng tính năng sinh sản thông minh cho các ứng dụng ruby. Đầu tiên nó tạo ra quy trình tải trước, quá trình này tải khung và tất cả các thư viện. Sau quá trình trình tải trước đó sinh ra các quy trình công nhân khi có nhu cầu, các quy trình này sẽ xử lý các yêu cầu. Khi sinh sản các quy trình công nhân, tất cả các bộ mô tả tệp được kế thừa từ quy trình trình tải trước. Vì vậy, nếu bạn không thiết lập lại kết nối với cơ sở dữ liệu, tất cả quy trình worker sẽ chia sẻ một quy trình, được thiết lập bởi trình tải trước. Dẫn đến tất cả các loại hành vi kỳ lạ. Thích các yêu cầu mất quá nhiều thời gian.
Trước đó, chúng tôi cũng đã chuyển việc xử lý các kết nối WebSocket sang một quy trình riêng biệt. Tuy nhiên, không chắc liệu nó có góp phần gây ra vấn đề hay không.
Tìm hiểu thêm về điều đó tại đây:
Ngắt kết nối nếu sử dụng Forking Webserver với Code tải trước
Chia sẻ bộ mô tả tệp không chủ ý
Chạy máy chủ Action Cable trên cùng một máy chủ và cổng, trong URI phụ