Any help is very much appreciated.
MySQL 5.0 and Rails 1.2.6
I have a Deamon process that looks for incoming mail using pop3. It
all works smashing, except after a day or so, the process starts
throwing this error every time it tries to talk to my database.
Mysql::Error: Lost connection to MySQL server during query: SELECT *
FROM incoming_email_messages WHERE (incoming_email_messages.name
''UID26-1219353451'') LIMIT 1
I have 4 rails instances running in a mongrel pack as well as 5 other
daemon processes all talking to the same database. They never
experience this loss of connectivity. The issue seems to be around my
repeated calls to the Ruby pop3 library. I suspect that this is some
kind of memory or garbage collection issue, but I don''t know for
sure. Right now, I have to bounce my thread once a day to snap it out
of it. I tried moving the Net::POP3.new call outside the loop and
just calling start/finish on the same object but that just make it
stop working altogether.
Here is the thread
#!/usr/bin/env ruby
##
require ''net/pop''
require ''rubygems'' # if you use RubyGems
require ''daemons''
Daemons.run_proc("incoming_email_thread", {:dir_mode => :normal,
:dir
=> ''tmp/pids''}) do
require "/home/xxxxx/user/xxxxxx/config/environment.rb"
loop {
logger.info(''incoming_email_thread: polling for email messages at
'' + Time.now.to_s)
begin
pop = Net::POP3.new(''mail.myserver.com'')
pop.start(''getit-mXuENlnwU4lWk0Htik3J/w@public.gmane.org'',
''password'')
if pop.mails.empty?
logger.info(''incoming_email_thread: no mail at '' +
Time.now.to_s)
else
i = 0
pop.each_mail do |m|
logger.info(''incoming_email_thread: message with id
'' +
m.unique_id)
filename = File.expand_path("#{RAILS_ROOT}/public/models/
emails/#{m.unique_id}")
dbrec = IncomingEmailMessage.new(:name =>
m.unique_id, :header => m.header, :status => ''writing'')
# This is where I see the error. The model has a
validate_uniqueness :name
if dbrec.save
if !File.exists?(filename)
File.open(filename, ''w'') do |f|
m.pop do |chunk| # get a message little by little.
f.write chunk
end
end
end
dbrec.update_attribute(:status, ''ready'')
else
logger.info(''incoming_email_thread: message with id
'' +
m.unique_id + '' has already been fetched'')
end
m.delete
end
logger.info("incoming_email_thread: #{pop.mails.size} mails
popped.")
end
pop.finish
rescue Exception => exc
logger.error("incoming_email_thread: receiving email.." +
exc.message)
logger.error(exc.backtrace.join("\n"))
end
sleep 60
}
end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---