我正尝试通过使用X-Accel-Redirect nginx和rails来提供静态内容。 我的实际静态内容directort位于rails根文件夹,就像这个rails_root\books 。 这是我的nginxconfiguration文件映射URL与实际的文件位置
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/; } }
和一个相应的轨道控制器
class ReaderController < ApplicationController def resource send_file "#{Rails.root}/books/sources/"+ params[:id] + "/" + params[:resource] + "." + params[:format] end end
控制器被nginx的X-Accel-redirect成功触发,控制器返回数据。 这是日志
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
但是下一个日志是完全不同的,请求停在那里
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'
它会抛出一个错误RoutingError(没有路由匹配[GET](实际的文件path) 。经过一些挖掘我发现,这个错误可能会发生,因为config.serve_static_assets = false在production.rb。但其实在我的configuration。
我已经testing了在独立模式下更换乘客,并使用nginx。 我总是得到同样的错误。 我完全被打到这里 有人可以帮我吗?