Ask A Question

Notifications

You’re not receiving notifications from this thread.

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

Tamer asked in Servers
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.
Reply
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.
Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 82,329+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.