2010-02-15 27 views
36

Tôi hiện đang phát triển một ứng dụng dựa trên Rack và muốn chuyển hướng tất cả các yêu cầu tệp (ví dụ: filename.filetype) đến một thư mục được chỉ định.Làm cách nào để phân phát tệp tĩnh qua Rack?

Giá :: Tĩnh chỉ hỗ trợ yêu cầu tệp cho một thư mục đặc biệt (ví dụ: "/ phương tiện").

Tôi có phải viết một phần mềm trung gian Rack riêng hoặc có giải pháp ngoài đời không?

Trân trọng

Trả lời

36

Để chuyển hướng mọi yêu cầu đến một con đường đặc biệt, sử dụng Rack::File (vì một lý do lớp này vắng mặt trong tài liệu gần đây, nhưng nó là still part of mới nhất rack):

run Rack::File.new("/my/path") 

Để chuyển hướng mọi yêu cầu, và thêm một chỉ số HTML của tất cả các file trong thư mục đích, sử dụng Rack::Directory:

run Rack::Directory.new("/my/path") 

Để kết hợp nhiều thư mục hoặc chỉ phục vụ một số yêu cầu từ dir mục tiêu:

map "/url/prefix" do 
    run Rack::File.new("/my/path") 
end 

# More calls to map if necessary... 

# All other requests. 
run MyApp.new 
+0

Tôi phải bọc MyApp.new chạy với bản đồ "/" do .. end. Nếu không, tôi đã nhận được một lỗi phương thức gọi không xác định. (Không biết tại sao.) –

9

Bạn có thể sử dụng trực tiếp Rack::File. Đây là một tập tin config.ru bạn có thể cắm vào rackup để xem nó hoạt động:

app = proc do |env| 
    Rack::File.new('foo/bar').call(env) 
end 

run app 
2
run Rack::Directory.new(Dir.pwd) 
9

Bản cập nhật, việc thực hiện rack mới nhất cho phép bạn sử dụng Rack::Static

Ví dụ:

use Rack::Static, :urls => ["/media"] 

Sẽ phân phối tất cả tài nguyên tĩnh dưới ./media thư mục có liên quan đến vị trí config.ru.

Các vấn đề liên quan