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 get this to work #56

Open
jxc876 opened this issue Aug 10, 2016 · 0 comments
Open

Can't get this to work #56

jxc876 opened this issue Aug 10, 2016 · 0 comments

Comments

@jxc876
Copy link

jxc876 commented Aug 10, 2016

I can't get a simple app to work with this, ex: I want to proxy /api to github.api

# app.rb

require 'sinatra'
require 'rack/proxy'

class SimpleProxy < Rack::Proxy

    def perform_request(env)
        request = Rack::Request.new(env)
        puts request.path
        if request.path =~ %r{/api}
            env["HTTP_HOST"] = "https://api.github.com"
            env["REQUEST_PATH"] = "/users/octocat"
            super(env)
        else
            @app.call(env)
        end
    end
end

class MyApp < Sinatra::Application
  use SimpleProxy, {ssl_verify_none: true}

    get '/sinatra' do
      'inside sinatra'
    end
end
# config.ru

require_relative 'app'
run Rack::URLMap.new('/' => MyApp)
rackup -p 3000
GET localhost:3000/api
...
/api
NoMethodError: undefined method `join' for #<String:0x0000000271aed8>
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/show_exceptions.rb:37:in `rescue in call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/show_exceptions.rb:21:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:180:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:2004:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1469:in `block in call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1778:in `synchronize'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1469:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/urlmap.rb:66:in `block in call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/urlmap.rb:50:in `each'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/urlmap.rb:50:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/tempfile_reaper.rb:15:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/lint.rb:49:in `_call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/lint.rb:37:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/showexceptions.rb:24:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:217:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/chunked.rb:54:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/content_length.rb:15:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:88:in `service'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
127.0.0.1 - - [10/Aug/2016:17:46:00 -0500] "GET /api HTTP/1.1" 500 68585 0.1990
...

Tried moving the use SimpleProxy, {ssl_verify_none: true} to my config.ru but that just resulted in a different error:

SocketError: getaddrinfo: Name or service not known
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:879:in `initialize'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:879:in `open'

        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:879:in `block in connect'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/timeout.rb:74:in `timeout'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:878:in `connect'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:858:in `start'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-proxy-0.6.0/lib/rack/http_streaming_response.rb:70:in `session'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-proxy-0.6.0/lib/rack/http_streaming_response.rb:59:in `response'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-proxy-0.6.0/lib/rack/http_streaming_response.rb:29:in `headers'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-proxy-0.6.0/lib/rack/proxy.rb:120:in `perform_request'
        /tmp/proxy/app.rb:12:in `perform_request'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-proxy-0.6.0/lib/rack/proxy.rb:57:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/tempfile_reaper.rb:15:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/lint.rb:49:in `_call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/lint.rb:37:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/showexceptions.rb:24:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:217:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/chunked.rb:54:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/content_length.rb:15:in `call'
        /tmp/proxy/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:88:in `service'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
        /home/mike/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'

Not sure what I'm doing wrong, I'm expecting:

{
  "login": "octocat",
  "id": 583231,
  "avatar_url": "https://avatars.githubusercontent.com/u/583231?v=3",
  "gravatar_id": "",
  "url": "https://api.github.com/users/octocat",
  "html_url": "https://github.com/octocat",
...

Not sure what I'm doing wrong.

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

1 participant