ungültige URI - Wie um zu verhindern, URI::InvalidURIError Fehler?
Bekam ich Folgendes zurück von 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
Die Art und Weise dieser URI kommt in meine app.
In meinem user_mailer ich tun:
@comment.attachments.each do |a|
attachments[a.attachment_file_name] = open(a.authenticated_url()) {|f| f.read }
end
Dann in meinem Anlagen-Modell:
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
Dass gesagt wird, gibt es eine Art von URI.Kodieren und analysieren kann ich tun, um zu verhindern, dass eine gültige URI (wie ich überprüft die URL funktioniert in meinem browser) für erroring und töten delayed_job in rails 3?
Danke!
- Ich habe versucht, ' open( URI.parse(URI.encode( ein.authenticated_url() )) ' aber, dass errord mit OpenURI::HTTPError: 403 Forbidden
- Dieser Fehler bedeutet nicht, die URL ist schlecht, es bedeutet, die Seite ist nicht verfügbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ruby hat (mindestens) zwei Module für den Umgang mit URIs.
URI ist Teil der standard-Bibliothek.
Adressierbare::URI ist ein eigenes Juwel, und umfassender, und behauptet, Sie entsprechen der spec.
Analysiert eine URL mit ein, ändern Sie Parameter mit Hilfe des gem-Methoden, konvertieren Sie es dann mit
to_s
vor der übergabe auf, und Sie sollten gut zu gehen.Wenn man navigiert, die Seite über einen browser, und es gelang, später dann scheiterte dann geht es direkt über den code, ist es wahrscheinlich, es ist ein cookie-oder session-Zustand fehlt. Möglicherweise müssen Sie etwas wie Mechanisieren, die behaupten, dass der Staat, während so dass Sie durch eine site navigieren.
EDIT: