InvalidURIError - how to clean up URIs before using .open()

Hello, I got the following back from delayed_job:

[Worker(XXXXXX pid:3720)] Class#XXXXXXX failed with

URI::InvalidURIError: bad URI(is not URI?):
https://s3.amazonaws.com/cline-local-dev/2/attachments/542/original/mac-os-x[1].jpeg?AWSAccessKeyId=xxxxxxxx&Expires=1295403309&Signature=xxxxxxx%3D

  • 3 failed attempts

The way this URI comes from in my app is:

In my user_mailer I do:

  @comment.attachments.each do |a|
    attachments[a.attachment_file_name] =

open(a.authenticated_url()) {|f| f.read }
end

Then in my attachments model:

  def authenticated_url(style = nil, expires_in = 90.minutes)
    AWS::S3::S3Object.url_for(attachment.path(style ||

attachment.default_style), attachment.bucket_name, :expires_in =>
expires_in, :use_ssl => attachment.s3_protocol == ‘https’)
end

That being said, is there some type of URI.encode or parsing I can do
to prevent a valid URI (as I checked the URL works in my browser) for
erroring and killing delayed_job in rails 3?

Thank you!

Thank you. What’s the best way to Encode All Unsafe Characters?
And should that be done in the model? or in the mailer?

On Jan 18, 9:00pm, Hassan S. [email protected]

On Tue, Jan 18, 2011 at 5:38 PM, CuriousNewbie [email protected]
wrote:

Hello, I got the following back from delayed_job:

[Worker(XXXXXX pid:3720)] Class#XXXXXXX failed with
URI::InvalidURIError: bad URI(is not URI?):

https://s3.amazonaws.com/cline-local-dev/2/attachments/542/original/mac-os-x[1].jpeg?AWSAccessKeyId=xxxxxxxx&Expires=1295403309&Signature=xxxxxxx%3D

That being said, is there some type of URI.encode or parsing I can do
to prevent a valid URI (as I checked the URL works in my browser) for
erroring…

and, sorry, that doesn’t mean it’s valid.

via: http://www.ietf.org/rfc/rfc1738.txt

Other characters are unsafe because gateways and other transport agents are known to sometimes modify such characters. These characters are "{", "}", "|", "\", "^", "~", "[", "]", and "`".

All unsafe characters must always be encoded within a URL.

HTH,

Hassan S. ------------------------ [email protected]
twitter: @hassan