I have the following code which works in production:
redirect_to "/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth"
In development(using Webrick), I am getting the following error message:
ERROR URI::InvalidURIError: bad URI(is not URI?): http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth
But if I copy and paste the supposedly bad URI in my browser address bar, it works!
I have tried various combinations of the error message text, and the spaces between words is causing it. I can make it work by using URI.escape or some other technique to escape the spaces, but then I would have to change hundreds of such occurrences in code which is working fine.
Thanks for taking the time to help.
As shown below, your URI is actually invalid. You can't have unescaped spaces in your URI.
1.9.3p194 :001 > require 'URI' => true
1.9.3p194 :002 > URI.parse('http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth')
URI::InvalidURIError: bad URI(is not URI?): http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/common.rb:176:in `split'
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/common.rb:211:in `parse'
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/common.rb:747:in `parse'
from (irb):2
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
You should escape
the URI:
1.9.3p194 :003 > URI.escape('http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth')
=> "http://localhost:3000/mycontroller/index.html%23&panel1-2?error=Invalid%20Member%20ID%20and/or%20Date%20of%20Birth"
Then you can redirect_to
the escaped URI:
redirect_to URI.escape('http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth')