I’ve tried many configurations and many combinations, right now this is what I have in my environment/staging.rbconfig.action_controller.asset_host = Proc.new { |source, request=nil| if request && request.ssl? “https://staging.foobar.it” else “http://assets#{ ( source.length % 4 ) + 1 }.staging.foobar.it” end }
with this solution it appears like the request object is always set at nil.
I’m using Ruby 1.9.3 and rails 3.2.12, with nginx as reverse proxy and unicorn as app server, and precompiling my assets
Has someone been able to configure this and have the https website link to the right https asset server? What am I doing wrong?
rake aborted! This asset host cannot be computed without a request in scope. Remove the second argument to your asset_host Proc if you do not need the request.
Hope it’s more clear. It’s bascially copied from the docs
Looking at the code, rails uses the arity of your proc to decide what to do. If the arity is 1 it passes just the source, if it is 2 it passes both, but will blow up when there is no request available (and warn you to) and if the arity is negative (you can pass as many optional arguments as you want) it passes both.
the problem is that lambda {|x,y=nil|} counts as an arity of 1, so rails doesn’t try to pass the request, if you do lambda {|x,*y|} then you should get the request in y (y will be an array).
However, you will presumably still need to deal with the fact that your precompiled assets will be either all ssl or all non ssl - if you serve some css that references (eg via background-url) a non ssl asset then I’d expect you to run into mixed content warnings.