pab*_*rti 12 ruby mysql fork mysql2 ruby-on-rails-3
我在Apache上使用Passenger生产了一个Rails 3应用程序.我有这个代码:
class Billing < ActiveRecord::Base
after_save :sendEmails
private
def sendEmails
fork do
UserMailer.clientBilling(self.user, self).deliver
end
end
end
Run Code Online (Sandbox Code Playgroud)
在localhost中,当应用程序创建帐单时,在保存后,应用程序会向用户发送电子邮件,一切正常.但是在服务器中,在应用程序创建计费之后,它会抛出与gem2M2相关的错误,"MySQL服务器已经消失"或"连接丢失"等错误,并且应用程序不会发送电子邮件.如果我删除fork它工作正常,但我想使用fork,我想创建一个单独的进程,因为它在发送电子邮件时需要很长时间.可能是什么问题呢?
Fre*_*ung 17
问题是分叉进程继承了它的一些父资源,例如它的文件描述符.特别是一个这样的共享资源是MySQL连接.当子进程完成其发送和退出的电子邮件时,它会关闭MySQL连接,从而关闭父进程连接.
如果你确实沿着这条路走下去(并且它有着相似的微妙之处)那么你需要做类似的事情
::ActiveRecord::Base.clear_all_connections!
Run Code Online (Sandbox Code Playgroud)
在你分叉之前
::ActiveRecord::Base.establish_connection
Run Code Online (Sandbox Code Playgroud)
然后.如果使用memcached或mongodb等服务,你必须做类似的事情.
使用带有导轨/乘客的叉子时要非常小心,它会变得非常凌乱!相反,你应该使用resque或delayed_job来完成这项任务!
| 归档时间: |
|
| 查看次数: |
5733 次 |
| 最近记录: |