brandonhilkert / sucker_punch

Sucker Punch is a Ruby asynchronous processing library using concurrent-ruby, heavily influenced by Sidekiq and girl_friday.
MIT License
2.65k stars 114 forks source link

Celluloid::Error - Thread pool is not running #64

Closed javiersuweijie closed 10 years ago

javiersuweijie commented 10 years ago

I can't seem to figure out where I'm missing out. The thing is that I could run the job in irb yet it fails when i run it as a sinatra app.

I'm using: sinatra (1.4.5) thin (1.6.2) sucker_punch (1.1)

Here is the stack trace

Celluloid::Error - Thread pool is not running:
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid/internal_pool.rb:28:in `assert_running'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid/internal_pool.rb:64:in `block in get'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid/internal_pool.rb:63:in `synchronize'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid/internal_pool.rb:63:in `get'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid/thread_handle.rb:10:in `initialize'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid/actor.rb:155:in `new'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid/actor.rb:155:in `initialize'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid.rb:188:in `new'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid.rb:188:in `new'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/celluloid-0.15.2/lib/celluloid.rb:223:in `pool'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sucker_punch-1.1/lib/sucker_punch/queue.rb:48:in `initialize_celluloid_pool'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sucker_punch-1.1/lib/sucker_punch/queue.rb:30:in `block in register'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sucker_punch-1.1/lib/sucker_punch/queue.rb:28:in `synchronize'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sucker_punch-1.1/lib/sucker_punch/queue.rb:28:in `register'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sucker_punch-1.1/lib/sucker_punch/job.rb:20:in `define_celluloid_pool'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sucker_punch-1.1/lib/sucker_punch/job.rb:9:in `new'
    app.rb:28:in `block in <main>'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `block in compile!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `[]'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (3 levels) in route!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:985:in `route_eval'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (2 levels) in route!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1006:in `block in process_route'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `catch'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `process_route'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:964:in `block in route!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `each'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `route!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1076:in `block in dispatch!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1073:in `dispatch!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `block in call!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `call!'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:886:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-livereload-0.3.15/lib/rack/livereload.rb:23:in `_call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-livereload-0.3.15/lib/rack/livereload.rb:14:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-1.5.2/lib/rack/logger.rb:15:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-1.5.2/lib/rack/commonlogger.rb:33:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:217:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:210:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-1.5.2/lib/rack/head.rb:11:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb:21:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:180:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:2014:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `block in call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1788:in `synchronize'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/thin-1.6.2/lib/thin/connection.rb:86:in `block in pre_process'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/thin-1.6.2/lib/thin/connection.rb:84:in `catch'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/thin-1.6.2/lib/thin/connection.rb:84:in `pre_process'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/eventmachine-1.0.3/lib/eventmachine.rb:1037:in `call'
    /Users/weijiejaviersu/.rvm/gems/ruby-2.1.0@server-control/gems/eventmachine-1.0.3/lib/eventmachine.rb:1037:in `block in spawn_threadpool'

Let me know if I can provide any more information. Thanks!

javiersuweijie commented 10 years ago

Things started working after I required sucker_punch before sinatra.

brandonhilkert commented 10 years ago

Glad you got it working.

stevendaniels commented 9 years ago

@brandonhilkert I've encountered the same issue in my tests with the following gems: sinatra (1.4.6) thin (1.6.3) sucker_punch (1.5.0)

The stack looks pretty much the same.

Thread pool is not running
/Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:29:in `assert_running'
/Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:62:in `block in get'
/Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:61:in `synchronize'
/Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:61:in `get'
/Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor_system.rb:30:in `get_thread'
.... 

When running the server in the development mode, the async.performsilently fails. Using perform instead of async.perform works.

Any thoughts?

brandonhilkert commented 9 years ago

Can you link me to a repo that has this issue so I can debug?

On Sunday, May 24, 2015, Steven Daniels notifications@github.com wrote:

@brandonhilkert https://github.com/brandonhilkert I've encountered the same issue in my tests with the following gems: sinatra (1.4.6) thin (1.6.3) sucker_punch (1.5.0)

The stack looks pretty much the same.

Thread pool is not running /Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:29:in assert_running' /Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:62:inblock in get' /Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:61:in synchronize' /Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb:61:inget' /Users/steven/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor_system.rb:30:in `get_thread' ....

When running the server in the development mode, the async.performsilently fails. Using perform instead of async.perform works.

Any thoughts?

— Reply to this email directly or view it on GitHub https://github.com/brandonhilkert/sucker_punch/issues/64#issuecomment-105098019 .


_Build a Ruby Gem is available! http://brandonhilkert.com/books/build-a-ruby-gem/?utm_source=gmail-sig&utm_medium=email&utm_campaign=gmail_

http://brandonhilkert.com

stevendaniels commented 9 years ago

While trying to reproduce the issue I realized it was an issue with the shotgun gem (which I use in development).

I created a new issue here #117 and included a gist that replicates the issue.