[Backgroundrb-devel] Backgroundrb assistance
hemant
gethemant at gmail.com
Tue Jan 20 16:40:00 EST 2009
If my memory you mean - result cache, you should definitely use
memcache in production. But i think you are using rather old version
of the plugin and hence that option may not be available.
On Wed, Jan 21, 2009 at 3:03 AM, Diogo Silva <diogo.silva at w20.pt> wrote:
> Hi,
>
> Thanks for support and sorry for annoyance. I'll try the solution tomorrow
> morning and let you know if worked.
>
> Another question. I'm having also problems related to failure in allocating
> memory with backgroundrb. Which is the best solution while configurating
> backgroudrb.yml?
>
> Best Regards,
> Diogo Silva
>
> 2009/1/20 hemant <gethemant at gmail.com>
>>
>> You can handle the exception. Http exception would be either timeout
>> or generic Exception class and hence wrap your external service
>> invocation code in:
>>
>> begin
>> # do some work
>> rescue Timeout::Error
>> # timeout error
>> rescue
>> # something else
>> end
>>
>> It should do the trick.
>>
>>
>>
>> On Wed, Jan 21, 2009 at 2:16 AM, Diogo Silva <diogo.silva at w20.pt> wrote:
>> > Hi,
>> > Don't know if it's the right address but I'm seeking help with my
>> > workers.
>> >
>> > I have two problems related to workers and backgroundrb:
>> >
>> > 1) I have a worker that uses soap/wsdlDriver and it's set to autoload
>> > and
>> > starts called by controller. This only makes a simple SOAP
>> > communication. It
>> > works most of the times. But sometimes worker dies and the reason is
>> > related
>> > with some timeout related with httpclient gem. When it dies it's a pain
>> > to
>> > make it work again.
>> > Down it's the code of my controller:
>> >
>> > def index
>> > prepare_job
>> > @id = "prepare"
>> > render 'admin/importar/worker'
>> > end
>> >
>> > def import
>> > execute_job
>> > @id = "execute"
>> > render 'admin/importar/worker'
>> > end
>> >
>> > def prepare_job
>> > start_worker("PREPARE_IMPORT")
>> > end
>> >
>> > def execute_job
>> > start_worker("EXECUTE_IMPORT")
>> > end
>> >
>> > def start_worker(action)
>> > worker = MiddleMan.ask_status(:worker => :iif_worker)
>> >
>> > if worker != nil && worker[:progress] < 4
>> > flash[:notice] = "Já existe um processo de importação a
>> > decorrer!"
>> > else
>> > MiddleMan.ask_work(:worker => :iif_worker, :worker_method =>
>> > :do_work,
>> > :data => action)
>> > session[:job_key] = :import
>> > end
>> > end
>> >
>> > def get_progress
>> > if request.xhr?
>> > worker = MiddleMan.ask_status(:worker => :iif_worker)
>> > return if worker == nil
>> >
>> > progress_percent = worker[:progress]
>> > render :update do |page|
>> > page.call('progressPercent', 'progressbar', progress_percent)
>> > if progress_percent >= 100
>> > @info = worker[:info]
>> > @total = worker[:total]
>> > if params[:id] == "prepare"
>> > page.replace_html 'import_content', :partial =>
>> > 'admin/importar/todo'
>> > elsif params[:id] == "execute"
>> > flash[:notice] = "#{@total} marcas importas com sucesso!"
>> > page.replace_html 'import_content', :partial =>
>> > 'admin/importar/done'
>> > end
>> > end
>> > end
>> > else
>> > redirect_to :action => 'index'
>> > end
>> > end
>> >
>> > And below some code of worker:
>> >
>> > require 'rexml/document'
>> > require 'soap/wsdlDriver'
>> > require 'xsd/mapping'
>> >
>> > class IifWorker < BackgrounDRb::MetaWorker
>> > set_worker_name :iif_worker
>> > #set_no_auto_load(true)
>> > #attr_reader :progress, :info, :total
>> >
>> > #def create(args = nil)
>> > # register_status('Dass')
>> > # Thread.abort_on_exception = true
>> > #end
>> >
>> > def do_work(action)
>> > @progress = 0
>> > update_status
>> > if action == "PREPARE_IMPORT"
>> > prepare_import
>> > elsif action == "EXECUTE_IMPORT"
>> > execute_import
>> > end
>> > @progress = 100
>> > update_status
>> > end
>> >
>> > def prepare_import
>> > stuff, chave = auth_and_query
>> > results = stuff.goldMineData.record
>> >
>> > @total = results.size
>> > @progress = 15
>> > @increment = ("%4.2f" % ((100.0 - @progress) / results.size)).to_f
>> > @info = findRecordsToUpdate(results)
>> >
>> > update_status
>> >
>> > @soap.reset_stream
>> > end
>> >
>> > def execute_import
>> > stuff, chave = auth_and_query
>> > results = stuff.goldMineData.record
>> >
>> > @total = results.size
>> > @progress = 15
>> > @increment = ("%4.2f" % ((100.0 - @progress) / results.size)).to_f
>> > @info = updateRecords(stuff.goldMineData.record)
>> > #@soap.UpdateGoldmine(:Key=>chave)
>> >
>> > update_status
>> >
>> > @soap.reset_stream
>> > end
>> >
>> > def auth_and_query
>> > factory =
>> >
>> > SOAP::WSDLDriverFactory.new("http://infofranchisingwsp.ife.pt:8081/infofranchisingUpdateService.asmx?WSDL")
>> > @soap = factory.create_rpc_driver
>> > soapResponse = @soap.GetToken(nil)
>> > token = soapResponse.getTokenResult
>> >
>> > chave = authenticate(token)
>> > @progress = 5
>> > update_status
>> > soapResponseXML = @soap.GetXML(:Key=>chave)
>> > @progress = 10
>> > update_status
>> >
>> > return soapResponseXML.getXMLResult, chave
>> > end
>> >
>> > def update_status
>> > register_status({:progress => @progress, :info => @info, :total =>
>> > @total})
>> > end
>> >
>> > def increment_progress
>> > @progress += @increment
>> > @progress = ("%3.2f" % @progress).to_f
>> > @progress = 100 if @progress > 100
>> > end
>> >
>> > def findRecordsToUpdate(results)
>> > (...)
>> >
>> > Can you help me solve this problem?
>> >
>> > Thanks in advance,
>> > Diogo Silva
>> >
>> > _______________________________________________
>> > Backgroundrb-devel mailing list
>> > Backgroundrb-devel at rubyforge.org
>> > http://rubyforge.org/mailman/listinfo/backgroundrb-devel
>> >
>>
>>
>>
>> --
>> Let them talk of their oriental summer climes of everlasting
>> conservatories; give me the privilege of making my own summer with my
>> own coals.
>>
>> http://gnufied.org
>
>
--
Let them talk of their oriental summer climes of everlasting
conservatories; give me the privilege of making my own summer with my
own coals.
http://gnufied.org
More information about the Backgroundrb-devel
mailing list