2012-04-18 31 views
11

Cố gắng tìm ra cách thay đổi máy chủ lưu trữ nội dung khi được một bộ điều khiển nhất định truy cập.Chuyển máy chủ lưu trữ tài sản cho bộ điều khiển

Bộ điều khiển phải được truy cập nghiêm ngặt bằng giao thức https, vì vậy tôi cần máy chủ lưu trữ nội dung được chuyển sang sử dụng https. Hiện tại, máy chủ lưu trữ nội dung được đặt thành tên miền phụ CNAME được liên kết với S3 và không có chứng chỉ SSL nào liên quan đến nó. Những gì tôi đang cố gắng đạt được là thay thế máy chủ lưu trữ nội dung hiện tại bằng URL https S3 của Amazon. Các tài sản duy nhất mà tôi lo lắng là CSS và JS bao gồm.

Tôi đã nghĩ đến việc sử dụng trình trợ giúp để tách máy chủ khỏi tệp stylesheet_link_tag và javascript_include_tag và thay thế chúng bằng url https Amazon S3. Dường như một chút tin tặc với tôi.

Hoặc có thể có cách để thay đổi máy chủ nội dung nếu request.ssl? là đúng?

Tôi đang sử dụng Rails 3.2.x.

Trả lời

16

Tìm ra giải pháp cho trường hợp của tôi.

Đã kết thúc bằng cách sử dụng một Proc trên config.action_controller.action_host trong tệp Môi trường sản xuất của tôi để xử lý một logic trên request.ssl? và trả lời cho phù hợp. Đây là mã

config.action_controller.asset_host = Proc.new { |source, request = nil, *_| 
    request && request.ssl? ? 'https://s3.amazonaws.com/my_bucket' : 'http://s3.my-domain.com' 
} 

'yêu cầu' được thiết lập để nil để chứa các trường hợp asset_host được gọi trong các tập tin tài sản (CSS và JS nếu bạn đang sử dụng các thẻ helper tài sản). Vì yêu cầu không tồn tại và nếu yêu cầu không được gán trong args, thì lỗi sẽ được ném khi các phần tử được biên dịch (như được hiển thị bên dưới).

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, or make it optional. 

Các * _ có mặt do một lỗi với đối số tùy chọn trong Proc http://bugs.ruby-lang.org/issues/5694

+0

này là rất tốt, ứng dụng của tôi là đa Tennant và nó hoán đổi cơ sở dữ liệu dựa trên các tên miền phụ, giải pháp này nên làm việc cũng giống như cũng để thay đổi tên miền phụ cho asset_host. Một câu hỏi là làm thế nào bạn sẽ viết một bài kiểm tra cho điều này? –

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