On Fri, Jul 10, 2009 at 7:42 PM, Daniel Spiewak <[email protected]> wrote:
> Shouldn't this still block the main thread under MRI? Green threads don't > allow for concurrent native dispatch. If you run a process (system/tick/sh) then Ruby is just waits on the process to complete, the thread is just sleeping and won't block other threads. Assaf > > > Daniel > > > On Jul 10, 2009, at 9:39 PM, "Assaf Arkin" <[email protected]> wrote: > > On Fri, Jul 10, 2009 at 3:17 AM, Martin Grotzke < >> [email protected]> wrote: >> >> Hi, >>> >>> I have another one :) >>> >>> I want to start a mailserver with test.setup so that it's available for >>> tests. >>> >>> I created a task that starts a simple java mail server which blocks >>> until it's interrupted. Now I wonder how it's possible to run this in >>> the background during the tests. >>> >>> This is the task: >>> >>> desc "Start mailserver on unprivileged ports" >>> task "run-mailserver" do >>> begin >>> Java::Commands.java('com.ericdaugherty.mail.server.Mail', >>> _('runtime/mailserver'), >>> :classpath => ['runtime/mailserver/lib', >>> FileList['runtime/mailserver/lib/*.jar']] >>> ) >>> rescue Exception >>> # this is excepted, as java probably was interrupted via CTRL-C >>> end >>> end >>> >>> >> Generally speaking: >> >> Thread.new do >> < start your process > >> end >> >> This starts a new thread and returns control to your code (anything >> following the end). Meanwhile the thread can start a new process and will >> end when the program returns. >> >> The main thread will *not* block so you need some way of telling when the >> process is ready to receive requests, and also some way of shutting it >> down >> from at_exit. >> >> Assaf >> >> >> Is it possible somehow to run this in the background during the tests? I >>> had a look at the jetty stuff, but there the lifecycle is managed via >>> URL communication... >>> >>> Thanx && cheers, >>> Martin >>> >>> >>> >>>
