Forcing a "wait"

I have something in my controller which needs to wait 1 or 2 seconds before doing a "render ..."

Is there a means in Ruby where I can make things wait by x seconds or milliseconds before continuing processing a request? Thanks, RVince

I have something in my controller which needs to wait 1 or 2 seconds before doing a "render ..."

well you could call sleep, but you will of course block that mongrel/ passenger instance etc. for the duration of the sleep (assuming rails in non threadsafe mode)

Fred

@Frederick:

could you give me a configuration example in which the sleep doesn’t block the process ? (rails threadsafe mode…)

I try with JRuby/Patched Mongrel/Glassfish gem but the result is evere the same: ex. 4 concurrent calls with sleep 10 each one I must wait 40 seconds !

The simple example I try is this:

def test

@value = Time.now

sleep 10

end

The full example is this:


rails concurrent
cd concurrent
script/generate controller test test
edit app/controllers/test_controller.rb, modify source as follow:
class TestController < ApplicationController
  def test
    @value = Time.now
    sleep 10
  end
end
edit app/views/test/test.html.erb, modify source as follow:
<%= @value %>
edit config/environments/production.rb, uncomment last line as follow:
config.threadsafe!
edit config/environemt.rbm uncomment frameworks line as follow (no database, resource, mail support for this very simple test...):
config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
Now run:
jruby -S gfrake config
edit config/glassfish.yml, modify config as follow (notice 4 runtime instances !):
environment: production
jruby-runtime-pool:
initial: 4
min: 4
max: 4
And finally start glassfish gem:
jruby -S glassfish
Now, if you try to call 4 times (concurrently) the following url...
...you must wait 40 seconds for the 4th response...
I try also with this configuration:
runtimes=>1
runtimes_min=>1
runtimes_max=>1

but I wait 40 seconds…

I try with “patched” mongrel but the time is the same…

Do you have an example of how to configure the system in which 4 concurrent requests with sleep 10 can run in only 10 seconds ?