2012-04-01 8 views
0

Ich habe eine dieser Klasse Middleware:Rails neu schreiben, wie diesen Code in Ruby-Code umschreiben?

class RedirectIt 
require "net/https" 
require "uri" 
require 'open-uri' 

    APP_DOMAIN = 'http://www.mydomain.com' 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
     request = Rack::Request.new(env) 
     response = Rack::Response.new(env) 
     response.headers['Cache-Control'] = "public, max-age=#{84.hours.to_i}" 
     response.headers['Content-Type'] = 'image/png' 
     response.headers['Content-Disposition'] = 'inline' 
     response.body = "#{open('http://s3-eu-west-1.amazonaws.com/bucket/asdas.png').read}" 
    end 

end 

Das Problem ist nur, dass es den Fehler gibt:

Started GET "/?view=boks" for 127.0.0.1 at 2012-04-01 04:07:58 +0200 

NoMethodError (You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.[]=): 

Sind tue etwas falsch? Ich habe versucht, diesen Code, den ich in der Steuerung hatte, neu zu schreiben:

def image_proxy 
    image_url = "http://s3-eu-west-1.amazonaws.com/bucket#{request.path}" 
    response.headers['Cache-Control'] = "public, max-age=#{84.hours.to_i}" 
    response.headers['Content-Type'] = 'image/png' 
    response.headers['Content-Disposition'] = 'inline' 
    render :text => open(image_url, "rb").read 
end 

Antwort

0

Die Lösung.

#PROXY BILLEDER 
    status, headers, response = @app.call(env) 
    headers['Cache-Control'] = "public, max-age=#{84.hours.to_i}" 
    headers['Content-Type'] = 'image/png' 
    headers['Content-Disposition'] = 'inline' 
    response_body = "#{(open('http://s3-eu-west-1.amazonaws.com/mybucket#{request.path()}')).read}" 
    [status, headers, response_body] 
Verwandte Themen