Ho un'app Rails 3 in produzione con Passenger su Apache. Ho questo codice:Utilizzo di fork in Ruby on Rails per la creazione di processi paralleli
class Billing < ActiveRecord::Base
after_save :sendEmails
private
def sendEmails
fork do
UserMailer.clientBilling(self.user, self).deliver
end
end
end
In localhost, quando l'applicazione crea una fatturazione, dopo che è stato salvato, l'applicazione invia una e-mail per l'utente, tutto funziona bene. Ma nel server, dopo che l'app crea una fatturazione, mi getta errori relativi alla gemma MySQL2, errori come "Il server MySQL è andato via" o "Connessione persa" e l'app non invia le email. Se rimuovo la forcella funziona correttamente, ma voglio usare fork, voglio creare un processo separato perché richiede molto tempo quando si inviano email. Quale potrebbe essere il problema?
sai quali risorse sono ereditate? Pensavo che un fork di processo copi l'intero processo? non è l'intero ambiente delle rotaie caricato di nuovo su una forcella? –
Copia l'intero processo, ma i descrittori di file si riferiscono esattamente allo stesso file (vedere la pagina man per fork) –
Ho trovato che 'establish_connection' non è sempre necessario, dato che ActiveRecord di solito gestirà questo in modo trasparente. – spume