Estou tentando veicular conteúdo estático por meio do nginx & trilhos usando X-Accel-Redirect
. Meu directort de conteúdo estático real localizado na pasta raiz do rails como este rails_root\books
. Este é o meu arquivo de configuração nginx mapeando o URL com a localização real do arquivo
server {
listen 3000;
server_name 127.0.0.1;
passenger_enabled on;
root /home/voodoo/work/reader/public;
location ~ /read/*./.* {
internal;
alias /home/voodoo/work/reader/books/sources/$1/$2;
}
location / {
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
passenger_pass_header X-Accel-Redirect;
passenger_set_cgi_param HTTP_X_ACCEL_MAPPING /read/=/home/voodoo/work/reader/books/sources/;
proxy_pass http://127.0.0.1:3001/;
}
}
E um respectivo controlador de trilhos
class ReaderController < ApplicationController
def resource
send_file "#{Rails.root}/books/sources/"+ params[:id] + "/" + params[:resource] + "." + params[:format]
end
end
O controlador é acionado com sucesso com o X-Accel-redirect
por nginx e o conroller retorna os dados. Este é o log
Started GET "/reader/229/OPS/cover.xml" for 127.0.0.1 at 2013-01-13 00:17:10 +0530
Processing by ReaderController#resource as XML
Parameters: {"id"=>"229", "resource"=>"OPS/cover"}
Client Ip Address 127.0.0.1
Sent file /home/voodoo/work/reader/books/sources/229/OPS/cover.xml (0.2ms)
Completed 200 OK in 7ms (ActiveRecord: 0.5ms)
cache: [GET /read/229/OPS/cover.xml] miss
Mas o próximo log é totalmente diferente, e o pedido pára aqui
Started GET "/home/voodoo/work/reader/books/sources/229/OPS/cover.xml" for 127.0.0.1 at 2013-01-13 00:17:10 +0530
ActionController::RoutingError (No route matches [GET] "/home/voodoo/work/reader/books/sources/229/OPS/cover.xml"):
actionpack (3.2.2) lib/action_dispatch/middleware/debug_exceptions.rb:21:in 'call'
actionpack (3.2.2) lib/action_dispatch/middleware/show_exceptions.rb:56:in 'call'
railties (3.2.2) lib/rails/rack/logger.rb:26:in 'call_app'
railties (3.2.2) lib/rails/rack/logger.rb:16:in 'call'
actionpack (3.2.2) lib/action_dispatch/middleware/request_id.rb:22:in 'call'
Ele lança um erro RoutingError (Nenhuma rota corresponde a [GET] (caminho real do arquivo) . Depois de algumas escavações eu descobri que, esse erro pode acontecer por causa de config.serve_static_assets = false
em production.rb. é realmente verdade na minha configuração.
Eu testei a mudança de passageiros no modo independente e com o nginx. Eu sempre recebo o mesmo erro. Estou totalmente impressionado aqui. Alguém pode me ajudar?