Hi, I''m new to BackgroundRB and am having some trouble figuring out what must be a simple thing. I''m in time crunch where I need my Rails app to generate PDF files on the fly for my website users. But before I leap into that, I''m trying to get familiar with the basics. So I have this worker in my rails app lib/worker folder: =============class PdfmakerWorker < BackgrounDRb::MetaWorker set_worker_name :pdfmaker_worker set_no_auto_load(true) def create(args = nil) # this method is called, when worker is loaded for the first time register_status(:cnt => 0) 1.upto 100000000 do |x| if x % 1000 == 0 register_status(:cnt => x) end end #exit end def getres res = "Just a test" return res end end =========================================================== I''ve written a simple program to test that worker and it is as follows: jk = MiddleMan.new_worker(:worker => :pdfmaker_worker, :job_key => "123", :data => nil) sleep (5) count = 0 while count < 1 pct = MiddleMan.ask_status(:worker => :pdfmaker_worker, :job_key => jk) sleep(2) puts "Count is: " + (pct[:cnt]).to_s res = MiddleMan.worker(:pdfmaker_worker, jk).getres puts "Res is: " + res.to_s end =========================================================== I run script/console and load the above program. The worker counts up to 10000000 and my little test program repeatedly queries the worker and writes "Count is <whatever>" to the screen as it should. However, when it get to my custom method "getres" in the last two lines of the test program, the return result for "res" is nil. The worker doesn''t crash, it just appears not to return a result. I''m sure it''s something simple, but I don''t see why. Here is a sample output of one iteration of the simple program: ===============Count is: 970000000 {:type=>:do_work, :worker=>:pdfmaker_worker, :worker_method=>:getres, :job_key=>"123"} Res is: {:type=>:get_status, :worker=>:pdfmaker_worker, :job_key=>"123"} =============== It looks like the call to "getres" is being recognized, but I''m obviously missing some critical link. My setup: Ubuntu 7.10 Ruby 1.8.6 Rails 2.0.2 BackgroundRB (been through several versions, latest of which was retrieved via svn on 4/17/08 and I updated the backgroundrb script as per install guidelines) Thanks in advance for your help. Rogelio --------------------------------- Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20080418/ed9dca84/attachment-0001.html
Sorry, I meant to reply-all. Here''s what I wrote: Hello Rogelio, If you want a return value you have to call it synchronously. The default call is asynchronous--because after all, it''s a background call. That''s why you''re getting nil back. To make a synchronous call, pass "true" as the 2nd argument to your worker: res = MiddleMan.worker(:pdfmaker_worker, jk).getres(nil, true) In this example I used nil for the first argument because your getres function doesn''t take an argument. For more info see http://backgroundrb.rubyforge.org/rails/index.html and read the section "Invoke a method on worker and get results." - Brian Morearty On Fri, Apr 18, 2008 at 11:07 AM, Roggie Boone <rogboone at yahoo.com> wrote:> Hi, > > I''m new to BackgroundRB and am having some trouble figuring > out what must be a simple thing. I''m in time crunch where I > need my Rails app to generate PDF files on the fly for my website > users. But before I leap into that, I''m trying to get familiar with > the basics. So I have this worker in my rails app lib/worker folder: > =============> class PdfmakerWorker < BackgrounDRb::MetaWorker > set_worker_name :pdfmaker_worker > set_no_auto_load(true) > def create(args = nil) > # this method is called, when worker is loaded for the first time > register_status(:cnt => 0) > 1.upto 100000000 do |x| > if x % 1000 == 0 > register_status(:cnt => x) > end > end > #exit > end > > def getres > res = "Just a test" > return res > end > end > > ===========================================================> > I''ve written a simple program to test that worker and it is as follows: > > jk = MiddleMan.new_worker(:worker => :pdfmaker_worker, :job_key => "123", > :data => nil) > > sleep (5) > > count = 0 > > while count < 1 > pct = MiddleMan.ask_status(:worker => :pdfmaker_worker, :job_key => jk) > sleep(2) > puts "Count is: " + (pct[:cnt]).to_s > > res = MiddleMan.worker(:pdfmaker_worker, jk).getres > puts "Res is: " + res.to_s > end > ===========================================================> > I run script/console and load the above program. The worker counts up > to 10000000 and my little test program repeatedly queries the worker > and writes "Count is <whatever>" to the screen as it should. > > However, when it get to my custom method "getres" in the last > two lines of the test program, the return result for "res" is nil. The > worker doesn''t crash, it just appears not to return a result. I''m sure it''s > something simple, but I don''t see why. > > Here is a sample output of one iteration of the simple program: > ===============> Count is: 970000000 > {:type=>:do_work, :worker=>:pdfmaker_worker, :worker_method=>:getres, > :job_key=>"123"} > Res is: > {:type=>:get_status, :worker=>:pdfmaker_worker, :job_key=>"123"} > ===============> > It looks like the call to "getres" is being recognized, but I''m obviously > missing some critical link. > > My setup: > > Ubuntu 7.10 > Ruby 1.8.6 > Rails 2.0.2 > BackgroundRB (been through several versions, latest of > which was retrieved via svn on 4/17/08 and I updated the > backgroundrb script as per install guidelines) > > Thanks in advance for your help. > > Rogelio > > ------------------------------ > Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it > now.<http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ> > > > _______________________________________________ > Backgroundrb-devel mailing list > Backgroundrb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/backgroundrb-devel >-- Brian -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20080418/17d8228e/attachment.html
Yes, thank you! I had read about the optional 2nd argument but misunderstood its usefulness. It''s working now. But I also learned that the return result is not just my string but a hash containing my string in the "data" hash member. Rog Brian Morearty <brian at morearty.org> wrote: Sorry, I meant to reply-all. Here''s what I wrote: Hello Rogelio, If you want a return value you have to call it synchronously. The default call is asynchronous--because after all, it''s a background call. That''s why you''re getting nil back. To make a synchronous call, pass "true" as the 2nd argument to your worker: res = MiddleMan.worker(:pdfmaker_worker, jk).getres(nil, true) In this example I used nil for the first argument because your getres function doesn''t take an argument. For more info see http://backgroundrb.rubyforge.org/rails/index.html and read the section "Invoke a method on worker and get results." - Brian Morearty On Fri, Apr 18, 2008 at 11:07 AM, Roggie Boone <rogboone at yahoo.com> wrote: Hi, I''m new to BackgroundRB and am having some trouble figuring out what must be a simple thing. I''m in time crunch where I need my Rails app to generate PDF files on the fly for my website users. But before I leap into that, I''m trying to get familiar with the basics. So I have this worker in my rails app lib/worker folder: ============= class PdfmakerWorker < BackgrounDRb::MetaWorker set_worker_name :pdfmaker_worker set_no_auto_load(true) def create(args = nil) # this method is called, when worker is loaded for the first time register_status(:cnt => 0) 1.upto 100000000 do |x| if x % 1000 == 0 register_status(:cnt => x) end end #exit end def getres res = "Just a test" return res end end =========================================================== I''ve written a simple program to test that worker and it is as follows: jk = MiddleMan.new_worker(:worker => :pdfmaker_worker, :job_key => "123", :data => nil) sleep (5) count = 0 while count < 1 pct = MiddleMan.ask_status(:worker => :pdfmaker_worker, :job_key => jk) sleep(2) puts "Count is: " + (pct[:cnt]).to_s res = MiddleMan.worker(:pdfmaker_worker, jk).getres puts "Res is: " + res.to_s end =========================================================== I run script/console and load the above program. The worker counts up to 10000000 and my little test program repeatedly queries the worker and writes "Count is <whatever>" to the screen as it should. However, when it get to my custom method "getres" in the last two lines of the test program, the return result for "res" is nil. The worker doesn''t crash, it just appears not to return a result. I''m sure it''s something simple, but I don''t see why. Here is a sample output of one iteration of the simple program: ===============Count is: 970000000 {:type=>:do_work, :worker=>:pdfmaker_worker, :worker_method=>:getres, :job_key=>"123"} Res is: {:type=>:get_status, :worker=>:pdfmaker_worker, :job_key=>"123"} =============== It looks like the call to "getres" is being recognized, but I''m obviously missing some critical link. My setup: Ubuntu 7.10 Ruby 1.8.6 Rails 2.0.2 BackgroundRB (been through several versions, latest of which was retrieved via svn on 4/17/08 and I updated the backgroundrb script as per install guidelines) Thanks in advance for your help. Rogelio --------------------------------- Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. _______________________________________________ Backgroundrb-devel mailing list Backgroundrb-devel at rubyforge.org http://rubyforge.org/mailman/listinfo/backgroundrb-devel -- Brian --------------------------------- Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20080418/2a140a30/attachment.html
> But I also learned that the return result is not just my string but a hashcontaining my string in the "data" hash member. That''s useful for me to know because that''s what was happening to me when I ported BackgrounDRb to Windows and I kept wondering if it was a bug on my side. But I guess that''s what (the current version of) BackgrounDRb does on all platforms, so it''s not just me. (I hadn''t tried it on another platform because all I have for now is Windows.) - Brian On 4/18/08, Roggie Boone <rogboone at yahoo.com> wrote:> > Yes, thank you! I had read about the optional 2nd argument > but misunderstood its usefulness. It''s working now. But I also > learned that the return result is not just my string but a hash > containing my string in the "data" hash member. > > Rog > > *Brian Morearty <brian at morearty.org>* wrote: > > Sorry, I meant to reply-all. Here''s what I wrote: > > Hello Rogelio, > > If you want a return value you have to call it synchronously. The default > call is asynchronous--because after all, it''s a background call. That''s why > you''re getting nil back. > > To make a synchronous call, pass "true" as the 2nd argument to your > worker: > > res = MiddleMan.worker(:pdfmaker_worker, jk).getres(nil, true) > > In this example I used nil for the first argument because your getres > function doesn''t take an argument. > > For more info see http://backgroundrb.rubyforge.org/rails/index.html and > read the section "Invoke a method on worker and get results." > > - Brian Morearty > > > > > On Fri, Apr 18, 2008 at 11:07 AM, Roggie Boone <rogboone at yahoo.com> wrote: > > > Hi, > > > > I''m new to BackgroundRB and am having some trouble figuring > > out what must be a simple thing. I''m in time crunch where I > > need my Rails app to generate PDF files on the fly for my website > > users. But before I leap into that, I''m trying to get familiar with > > the basics. So I have this worker in my rails app lib/worker folder: > > =============> > class PdfmakerWorker < BackgrounDRb::MetaWorker > > set_worker_name :pdfmaker_worker > > set_no_auto_load(true) > > def create(args = nil) > > # this method is called, when worker is loaded for the first time > > register_status(:cnt => 0) > > 1.upto 100000000 do |x| > > if x % 1000 == 0 > > register_status(:cnt => x) > > end > > end > > #exit > > end > > > > def getres > > res = "Just a test" > > return res > > end > > end > > > > ===========================================================> > > > I''ve written a simple program to test that worker and it is as follows: > > > > jk = MiddleMan.new_worker(:worker => :pdfmaker_worker, :job_key => > > "123", :data => nil) > > > > sleep (5) > > > > count = 0 > > > > while count < 1 > > pct = MiddleMan.ask_status(:worker => :pdfmaker_worker, :job_key => > > jk) > > sleep(2) > > puts "Count is: " + (pct[:cnt]).to_s > > > > res = MiddleMan.worker(:pdfmaker_worker, jk).getres > > puts "Res is: " + res.to_s > > end > > ===========================================================> > > > I run script/console and load the above program. The worker counts up > > to 10000000 and my little test program repeatedly queries the worker > > and writes "Count is <whatever>" to the screen as it should. > > > > However, when it get to my custom method "getres" in the last > > two lines of the test program, the return result for "res" is nil. The > > worker doesn''t crash, it just appears not to return a result. I''m sure it''s > > something simple, but I don''t see why. > > > > Here is a sample output of one iteration of the simple program: > > ===============> > Count is: 970000000 > > {:type=>:do_work, :worker=>:pdfmaker_worker, :worker_method=>:getres, > > :job_key=>"123"} > > Res is: > > {:type=>:get_status, :worker=>:pdfmaker_worker, :job_key=>"123"} > > ===============> > > > It looks like the call to "getres" is being recognized, but I''m > > obviously > > missing some critical link. > > > > My setup: > > > > Ubuntu 7.10 > > Ruby 1.8.6 > > Rails 2.0.2 > > BackgroundRB (been through several versions, latest of > > which was retrieved via svn on 4/17/08 and I updated the > > backgroundrb script as per install guidelines) > > > > Thanks in advance for your help. > > > > Rogelio > > > > ------------------------------ > > Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try > > it now.<http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ> > > > > _______________________________________________ > > Backgroundrb-devel mailing list > > Backgroundrb-devel at rubyforge.org > > http://rubyforge.org/mailman/listinfo/backgroundrb-devel > > > > > > -- > Brian > > > ------------------------------ > Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it > now.<http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ> > >-- Brian -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20080418/88af9644/attachment-0001.html