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

Can't bind socket uri containing a space char #622

Closed
sabamotto opened this issue Dec 13, 2014 · 2 comments
Closed

Can't bind socket uri containing a space char #622

sabamotto opened this issue Dec 13, 2014 · 2 comments

Comments

@sabamotto
Copy link

puma 2.10.2, Ruby 2.1.3p242

config/puma.rb :

app_root = "#{File.expand_path('../..', __FILE__)}"
# app_root is "/Users/saba/rails projects/test"

bind "unix://#{app_root}/tmp/sockets/puma.sock"
threads 1, 16

run puma -C config/puma.rb, then it occurred URI::InvalidURIError.
output :

Puma starting in single mode...
* Version 2.10.2 (ruby 2.1.3-p242), codename: Robots on Comets
* Min threads: 1, max threads: 16
* Environment: development
/Users/saba/.rbenv/versions/2.1.3/lib/ruby/2.1.0/uri/common.rb:176:in `split': bad URI(is not URI?): unix:///Users/saba/rails projects/test/tmp/sockets/puma.sock (URI::InvalidURIError)
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/2.1.0/uri/common.rb:211:in `parse'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/2.1.0/uri/common.rb:747:in `parse'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:83:in `block in parse'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:82:in `each'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:82:in `parse'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/runner.rb:119:in `load_and_bind'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/single.rb:78:in `run'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/cli.rb:507:in `run'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/bin/puma:10:in `<top (required)>'
  from /Users/saba/.rbenv/versions/2.1.3/bin/puma:23:in `load'
  from /Users/saba/.rbenv/versions/2.1.3/bin/puma:23:in `<main>'

escaped uri :

bind URI.escape("unix://#{app_root}/tmp/sockets/puma.sock")

retry... Errno::ENOENT.
output :

Puma starting in single mode...
* Version 2.10.2 (ruby 2.1.3-p242), codename: Robots on Comets
* Min threads: 1, max threads: 16
* Environment: development
* Listening on unix:///Users/saba/rails%20projects/test/tmp/sockets/puma.sock
/Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:276:in `initialize': No such file or directory - connect(2) for "/Users/saba/rails%20projects/test/tmp/sockets/puma.sock" (Errno::ENOENT)
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:276:in `new'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:276:in `add_unix_listener'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:119:in `block in parse'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:82:in `each'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/binder.rb:82:in `parse'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/runner.rb:119:in `load_and_bind'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/single.rb:78:in `run'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/lib/puma/cli.rb:507:in `run'
  from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/puma-2.10.2/bin/puma:10:in `<top (required)>'
  from /Users/saba/.rbenv/versions/2.1.3/bin/puma:23:in `load'
  from /Users/saba/.rbenv/versions/2.1.3/bin/puma:23:in `<main>'
@momer
Copy link
Contributor

momer commented Dec 19, 2014

URI#escape

is the wrong command to use.

Shellwords#shellescape

Should do fine. This isn't a Puma issue, this is your config issue.

See http://www.ruby-doc.org/stdlib-2.1.5/libdoc/shellwords/rdoc/Shellwords.html for more info.

@sabamotto
Copy link
Author

Thanks momer. I didn't know Shellwords#shellescape.
But it occurred an URI::InvalidURIError like first code result.

URI#parse seems it cannot parse a shell-escaped uri.

[1] pry(main)> URI.parse Shellwords.shellescape('unix://space char/test.sock')
URI::InvalidURIError: bad URI(is not URI?): unix://space\ char/test.sock
from /Users/saba/.rbenv/versions/2.1.3/lib/ruby/2.1.0/uri/common.rb:176:in `split'

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

No branches or pull requests

2 participants