Tắt đầu của bạn, bạn có thể chạy phiên bản máy chủ mới cho từng tên miền phụ bằng cách sử dụng môi trường khác nhau.
Nhưng điều đó sẽ không mở rộng rất tốt.
Tuy nhiên, số ít nhất google hits for multiple rails databases sẽ đưa ra một số đề xuất mới. Việc kết hợp thông tin trong các liên kết này cung cấp giải pháp hoàn toàn chưa được kiểm tra này cho một cá thể máy chủ duy nhất.
Bạn sẽ cần thêm mục nhập cơ sở dữ liệu cho mỗi tên miền phụ trong databases.yml của mình. Sau đó thêm before_filter vào bộ điều khiển ứng dụng của bạn
Cập nhật! Ví dụ tải lại cấu hình cơ sở dữ liệu động. Thật không may là không có cách nào tốt để làm cho đường dẫn cập nhật rộng mà không gây rối với nội bộ của máy chủ của bạn. Vì vậy, cấu hình cơ sở dữ liệu sẽ phải được tải lại trên mọi yêu cầu.
Ví dụ này giả định các mục cơ sở dữ liệu trong databases.yml được đặt tên theo tên miền phụ.
config/database.yml ứng dụng
login: &login
adapter: mysql
username: rails
password: IamAStrongPassword!
host: localhost
production:
<<: *login
database: mysite_www
subdomain1:
<<: *login
database: mysite_subdomain1
subdomain2:
<<: *login
database: mysite_subdomain2
...
/controllers/application_controller.rb require 'ERB' before_filter: switch_db_connection
def switch_db_connection
subdomain = request.subdomains.first
ActiveRecord::Base.configurations = YAML::load(ERB.new(IO.read(Rails.configuration.database_configuration_file)).result)
ActiveRecord::Base.establish_connection("mysite_#{subdomain}")
end
Như tôi đã nói nó hoàn toàn chưa được kiểm tra. Nhưng tôi không thấy trước bất kỳ vấn đề lớn nào. Nếu nó không làm việc hy vọng nó đặt bạn đi đúng hướng.
+1 - Chắc chắn rất hữu ích. Bạn có thể cho tôi một ý tưởng về hiệu suất đạt được (nếu có chú ý) với cách tiếp cận này không? –
Xin lỗi tôi không có điểm chuẩn về vấn đề này. Tôi chỉ có điều này làm việc trên một phiên bản beta tư nhân vào lúc này. – Kris
Bất cứ ai có bất kỳ suy đoán về việc liệu điều này sẽ có một hit hiệu suất khủng khiếp hay không? Tôi muốn làm một cái gì đó tương tự cho một trang web sản xuất. – NotDan