Skip to main content

URI::InvalidComponentError (bad component(expected scheme component): : https):

Servers • Asked by Tamer
First of all, this problem is a persistent, and I'm trying to solve it for a week with 0 progress.

I'm working on a Ruby on Rails website and using Devise and Omniouth-<social media> for authentication. It was running very smoothly.

However, after configuring a paid SSL certificate with Nginx, with almost every redirect I get the following in my app console:

    Cannot render console from <my laptop ip>! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
  
    URI::InvalidComponentError (bad component(expected scheme component): : https):
  
    /home/tamer/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/uri/generic.rb:322:in `check_scheme'
    /home/tamer/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/uri/generic.rb:363:in `scheme='
    actionpack (5.1.5) lib/action_dispatch/routing/redirection.rb:35:in `serve'
    actionpack (5.1.5) lib/action_dispatch/routing/redirection.rb:21:in `call'
    actionpack (5.1.5) lib/action_dispatch/routing/mapper.rb:17:in `block in <class:Constraints>'
    actionpack (5.1.5) lib/action_dispatch/routing/mapper.rb:46:in `serve'
    actionpack (5.1.5) lib/action_dispatch/journey/router.rb:50:in `block in serve'
    actionpack (5.1.5) lib/action_dispatch/journey/router.rb:33:in `each'
    actionpack (5.1.5) lib/action_dispatch/journey/router.rb:33:in `serve'
    actionpack (5.1.5) lib/action_dispatch/routing/route_set.rb:844:in `call'
    omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
    omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
    omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
    omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
    omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
    omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
    omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
    omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
    omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
    omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
    omniauth (1.8.1) lib/omniauth/builder.rb:63:in `call'
    warden (1.2.7) lib/warden/manager.rb:36:in `block in call'
    warden (1.2.7) lib/warden/manager.rb:35:in `catch'
    warden (1.2.7) lib/warden/manager.rb:35:in `call'
    rack (2.0.4) lib/rack/etag.rb:25:in `call'
    rack (2.0.4) lib/rack/conditional_get.rb:25:in `call'
    rack (2.0.4) lib/rack/head.rb:12:in `call'
    rack (2.0.4) lib/rack/session/abstract/id.rb:232:in `context'
    rack (2.0.4) lib/rack/session/abstract/id.rb:226:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/cookies.rb:613:in `call'
    activerecord (5.1.5) lib/active_record/migration.rb:556:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
    activesupport (5.1.5) lib/active_support/callbacks.rb:97:in `run_callbacks'
    actionpack (5.1.5) lib/action_dispatch/middleware/callbacks.rb:24:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/executor.rb:12:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
    web-console (3.5.1) lib/web_console/middleware.rb:135:in `call_app'
    web-console (3.5.1) lib/web_console/middleware.rb:20:in `block in call'
    web-console (3.5.1) lib/web_console/middleware.rb:18:in `catch'
    web-console (3.5.1) lib/web_console/middleware.rb:18:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
    railties (5.1.5) lib/rails/rack/logger.rb:36:in `call_app'
    railties (5.1.5) lib/rails/rack/logger.rb:24:in `block in call'
    activesupport (5.1.5) lib/active_support/tagged_logging.rb:69:in `block in tagged'
    activesupport (5.1.5) lib/active_support/tagged_logging.rb:26:in `tagged'
    activesupport (5.1.5) lib/active_support/tagged_logging.rb:69:in `tagged'
    railties (5.1.5) lib/rails/rack/logger.rb:24:in `call'
    sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
    request_store (1.4.0) lib/request_store/middleware.rb:19:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/request_id.rb:25:in `call'
    rack (2.0.4) lib/rack/method_override.rb:22:in `call'
    rack (2.0.4) lib/rack/runtime.rb:22:in `call'
    activesupport (5.1.5) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/executor.rb:12:in `call'
    actionpack (5.1.5) lib/action_dispatch/middleware/static.rb:125:in `call'
    rack (2.0.4) lib/rack/sendfile.rb:111:in `call'
    railties (5.1.5) lib/rails/engine.rb:522:in `call'
    puma (3.11.2) lib/puma/configuration.rb:225:in `call'
    puma (3.11.2) lib/puma/server.rb:624:in `handle_request'
    puma (3.11.2) lib/puma/server.rb:438:in `process_client'
    puma (3.11.2) lib/puma/server.rb:302:in `block in run'
    puma (3.11.2) lib/puma/thread_pool.rb:120:in `block in spawn_thread'

This message doesn't prevent the website from loading. But when user logs out (I'm using Devise for username/password user authentication). the website throws in the browser the error I mentioned earlier:

    
URI::InvalidComponentError bad component(expected scheme component): : https Extracted source (around line #322): def check_scheme(v) if v && parser.regexp[:SCHEME] !~ v raise InvalidComponentError, # line 322 "bad component(expected scheme component): #{v}" end

and I get the console error message twice.

Here is a part of my Nginx configuration :


server {
    listen 443 ssl;
    server_name <server-name>;

    client_max_body_size 15M;
    ssl                  on;
    ssl_certificate      <.pem file path>;
    ssl_certificate_key  <.key file path>;
    ...
    root <"public" directory inside my app directory>;
    access_log <ssl.access.log path>;
    error_log  <ssl.error.log path>;

    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_pass http://127.0.0.1:3000;

        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header X-Forwarded-Proto: $scheme;
 }


Note: I'm running in development environment so far.

Are you running SSL on your development machine? Ot are you running your server in development? Bit confused by this.

Possible cause is you're redirecting to `https://…` for development. You can, for testing purposes, set your app's redirect url to `http://`—if you did not set up SSL (unlikely). Or it's the other way around—your redirect url is not properly set up (including `https://`).

There are plenty of other possible—but not enough info (for me at this point), to help more.

Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 24,647+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.