Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Standalone resque-web without a Rack server raises NoMethodError #1835

Closed
mishina2228 opened this issue Sep 20, 2022 · 0 comments · Fixed by #1836
Closed

Standalone resque-web without a Rack server raises NoMethodError #1835

mishina2228 opened this issue Sep 20, 2022 · 0 comments · Fixed by #1836

Comments

@mishina2228
Copy link
Contributor

mishina2228 commented Sep 20, 2022

I tried to run resque-web with minimal configuration but got an error.
Here is a minimal reproduce:

Gemfile:

source "https://rubygems.org"

gem 'resque'

Output:

$ bundle exec resque-web --foreground
[2022-09-20 22:10:34 +0900] Starting 'resque-web'...
[2022-09-20 22:10:34 +0900] trying port 5678...
[2022-09-20 22:10:34 +0900] Running with Rack handler: nil
bundler: failed to load command: resque-web (/home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/bin/resque-web)
/home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/resque-2.4.0/lib/resque/web_runner.rb:178:in `run!': undefined method `run' for nil:NilClass (NoMethodError)

      rack_handler.run app, :Host => host, :Port => port do |server|
                  ^^^^
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/resque-2.4.0/lib/resque/web_runner.rb:115:in `start'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/resque-2.4.0/lib/resque/web_runner.rb:48:in `initialize'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/resque-2.4.0/bin/resque-web:15:in `new'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/resque-2.4.0/bin/resque-web:15:in `<top (required)>'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/bin/resque-web:25:in `load'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/bin/resque-web:25:in `<top (required)>'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/cli/exec.rb:58:in `load'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/cli/exec.rb:58:in `kernel_load'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/cli/exec.rb:23:in `run'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/cli.rb:486:in `exec'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/cli.rb:31:in `dispatch'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/cli.rb:25:in `start'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/exe/bundle:48:in `block in <top (required)>'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
        from /home/owner/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.22/exe/bundle:36:in `<top (required)>'
        from /home/owner/.rbenv/versions/3.1.2/bin/bundle:25:in `load'
        from /home/owner/.rbenv/versions/3.1.2/bin/bundle:25:in `<main>'

This was due to the lack of a valid Rack server, as noted below.

[2022-09-20 22:10:34 +0900] Running with Rack handler: nil

def run!
logger.info "Running with Rack handler: #{@rack_handler.inspect}"

From the following source code, it seems that @app.server returns possible servers and
it is trying to see if they can be loaded.

# If they aren't using our hook, try to use their @app.server settings
elsif @app.respond_to?(:server) and @app.server
# If :server isn't set, it returns an array of possibilities,
# sorted from most to least preferable.
if @app.server.is_a?(Array)
handler = nil
@app.server.each do |server|
begin
handler = Rack::Handler.get(server)
break
rescue LoadError, NameError
next
end
end
handler

Therefore, I added puma to the Gemfile and it works.

$ bundle exec resque-web --foreground
[2022-09-20 22:32:51 +0900] Starting 'resque-web'...
[2022-09-20 22:32:51 +0900] trying port 5678...
[2022-09-20 22:32:51 +0900] Running with Rack handler: Rack::Handler::Puma
Puma starting in single mode...
* Puma version: 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version")
*  Min threads: 0
*  Max threads: 5
*  Environment: development
*          PID: 130995
* Listening on http://0.0.0.0:5678
Use Ctrl-C to stop

However, it took me a while to understand the cause of the problem and it would be nice to see the appropriate message.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant