I am using a Celluloid pool in a Rails application to offload pdf conversions after a user uploaded files.
I used an initializer to create a global conversion pool for the application.
All went well in my development environment (OS X, thin). And also no problem running it on my CentOS box (Apache, Passenger).
This is basically the initial setup:
config/initializers/converter_pool.rb
require './lib/x/convert_async'
CONVERT_POOL=X::ConvertAsync.pool
lib/X/convert.rb
module X
class Convert
end
end
lib/X/convert_async.rb
require_relative 'convert'
module X
class ConvertAsync < Convert
include Celluloid
end
end
At some stage my pool stopped working on the CentOS box (usertest env) but continued ok in my development environment.
Additional note: Pool still worked when the methods updating the images was called through the console. I guess the problem had to do with load order or permissions of some kind.
Not sure what caused it - there was a new Linux kernel and updates to gems.
After various attempts I finally got it working again by initializing the pool after the class definition and removing the initializer for the pool.
module X
class ConvertAsync < Convert
include Celluloid
end
end
CONVERT_POOL=X::ConvertAsync.pool
I still have Questions since I like to understand better what happened.
Does anybody know what might have caused it? It is a bad idea to instantiate a Celluloid pool after the class definition? Are there any potential issues?
Many thanks in advance for anyone who can shed some light :) Cheers, Eugen