2012-02-07 12 views
6

Đây là một câu hỏi rất đơn giản: Làm cách nào để chạy ứng dụng Yesod có thể xử lý nhiều máy chủ cùng một lúc?Ứng dụng Yesod độc lập tên máy chủ

Thiết lập Yesod mặc định có thể xử lý các kết nối đến từ bất kỳ máy chủ nào, nhưng tất cả URL được hiển thị với approot được thêm vào trước. Ghi đè joinPath trong khai báo cá thể Yesod sẽ có thể, nếu có cách lưu trữ miền hiện tại để nó có sẵn cho hàm đó, nhưng không có.

Phương pháp được mô tả trên this wiki page hoạt động, nhưng rất đáng sợ, vì nó buộc các tuyến đường lấy thêm tham số domain (vì tôi không có một nhóm miền tĩnh để đối sánh). Đối với các mục đích thực tế (vì tôi có nhiều tuyến đường, một số tuyến là độc lập với miền), sẽ tốt hơn nếu có giải pháp để lại các tuyến đường bị ảnh hưởng vì có thể vẫn lấy tên máy chủ từ thông tin yêu cầu WAI bên trong một hàm xử lý.

Tôi sử dụng những thứ yêu cầu URL tuyệt đối (ví dụ: email, RSS, XML API) để approot _ = "" không phải là một tùy chọn.

Tôi không và không thể biết tất cả tên máy chủ lưu trữ, cần được hỗ trợ, tại thời điểm biên dịch.

Vì vậy, làm cách nào để hiển thị URL để chúng sử dụng tên máy chủ của yêu cầu gửi đến chứ không phải biến số approot?

Trả lời

3

Một cách tiếp cận sẽ bao gồm tên miền thực trong loại nền tảng và sử dụng phần mềm trung gian để trang trại cho ứng dụng thích hợp tùy thuộc vào Yêu cầu, sinh ra các tên mới nếu cần. Tuy nhiên, điều này cảm thấy quá nặng.

Tôi muốn giữ nguyên trạng thái như vậy, vì nó phù hợp với trường hợp chung, nhưng có lẽ chúng ta có thể thêm phương thức bổ sung approotRequest sẽ được cung cấp giá trị Request. Tôi muốn chuyển cuộc thảo luận này vào danh sách.

Cập nhật: Thay đổi đã hạ cánh tại Git: https://github.com/yesodweb/yesod/commit/4dd9880389e3b61f976e44525ae97831ec578a17

+0

tôi sẽ được sau các cuộc thảo luận, và sẽ đánh giá cao một cập nhật cho câu trả lời này (đối với những người dùng khác) từng là một giải pháp là trong Repos. Cảm ơn! – dflemstr