Problem polega na tym, że rozwidlony proces dziedziczy niektóre zasoby swojego rodzica, takie jak deskryptory plików. W szczególności jednym z takich współdzielonych zasobów jest połączenie MySQL. Kiedy proces potomny zakończy wysyłanie wiadomości e-mail i wyjdzie, zamyka połączenie MySQL, które zamyka połączenie procesów nadrzędnych.
Jeśli pójdziesz dalej tą ścieżką (i jest ona pełna podobnych subtelności), musisz zrobić coś takiego:
# Clear existing connections before forking to ensure they do not get inherited.
::ActiveRecord::Base.clear_all_connections!
fork do
# Establish a new connection for each fork.
::ActiveRecord::Base.establish_connection
# The rest of the code for each fork...
end
Będziesz musiał zrobić podobną rzecz z usługami takimi jak memcached lub mongodb, jeśli z nich korzystasz.