2012-03-07 32 views
5

Tôi đã tìm kiếm trên web, nhưng tôi chỉ có thể tìm thông tin về mã chia sẻ giữa nhiều trang web và tách cơ sở dữ liệu thành các mô hình riêng biệt. Đây không phải là điều tôi muốn.Nhiều trang web trong nhiều dự án trên cùng một máy chủ đường ray

Tôi muốn chạy một máy chủ ray duy nhất, với một địa chỉ duy nhất DNS và một cổng duy nhất - http://myportal.com - mà sẽ xử lý một số trang web khác - http://myportal.com/site1, http://myportal.com/site2, vv

Tôi muốn mỗi trang web để có nó là thư mục riêng (và kho lưu trữ SCM), đó là cơ sở dữ liệu riêng, đó là định tuyến riêng - nó là tất cả mọi thứ. Đó là - Tôi muốn có thể phát triển từng trang web dưới dạng độc lập - điều đó có nghĩa là tôi cần có thể chạy trang web site1 dưới dạng http://localhost:3000 chứ không phải http://localhost:3000/site1. Trên máy chủ, trang gốc (địa chỉ trả lời địa chỉ http://myportal.com phải là địa chỉ tôi chạy máy chủ và cần biết đường dẫn tuyệt đối của các trang web khác (các thư mục này sẽ nằm trong các thư mục khác nhau trên máy chủ). máy chủ, không nằm trong thư mục con của trang gốc) và cung cấp thông tin định tuyến cho chúng - nhưng cũng cần phải chuỗi các trang web khác routes.rb tệp. Điều đó có nghĩa là nếu tôi truy cập vào địa chỉ http://myportal.com/site1/books/, trang gốc sẽ xử lý http://myportal.com/site1 và site1 sẽ xử lý /books/. Trang gốc nên không cần biết về cấu trúc định tuyến nội bộ của các trang web khác

Điều này có thể không? Ngay bây giờ tôi đang chạy máy chủ rails đi kèm với g em (rails server từ dòng lệnh) trên máy chủ Windows Server 2008, nhưng tôi sẵn sàng cài đặt một máy chủ khác nếu đó là những gì cần thiết để hoàn thành mục tiêu tôi mô tả.

Cảm ơn trước!

Trả lời

1

Bạn có thể thực hiện việc này với Apache hoặc nginx và có thể là IIS nếu được định cấu hình đúng. Tôi quen thuộc nhất với Apache và linh kiện mod_rewritemod_proxy thành phần có thể tạo điều kiện thuận lợi cho việc này.

Ý tưởng là bạn viết lại http://example.com/ thành http://example.com:3000/http://example.com/site2http://example.com:3001/site2 v.v.

Cũng có thể thực hiện việc này với Hành khách và sử dụng thông minh chỉ thị VirtualHost, nhưng bạn có thể phải khéo léo để có được cấu hình phù hợp với mình. Hãy nhớ rằng việc viết lại tiêu đề để định tuyến nội bộ không ảnh hưởng đến kết quả HTML mà máy chủ của bạn phát ra.

+0

Vì vậy, nếu tôi hiểu đúng, tôi cần phải sử dụng nhiều cổng, và để làm công việc định tuyến trong DNS? Không có cách nào để làm điều này với một cổng duy nhất? –

+0

DNS hướng khách hàng đến máy chủ của bạn. Máy chủ của bạn cần phải định tuyến nội bộ các yêu cầu đến cổng thích hợp. Đây có lẽ là cách dễ nhất để chia nhỏ nhiều trang web vì chỉ thị 'VirtualHost' chụp bất kỳ thứ gì với tên máy chủ cụ thể theo mặc định, nhưng chỉ trên một cổng cụ thể. Sử dụng nhiều tổ hợp lưu trữ + cổng cho bạn sự linh hoạt mà bạn muốn. – tadman

+0

OK, tôi sẽ thử. Có bất kỳ hướng dẫn phong nha về 'VirtualHost' trong đường ray? –

0

Tạo một liên kết tượng trưng:

cd ~/Sites 
ln -s /Users/hg/Developer/Rails/railsproj1/public ./railsproj1 

sửa đổi tập tin cấu hình apache

<VirtualHost *:80> 
    ServerName localhost 
    DocumentRoot /Users/hg/Sites 
    <Directory /Users/hg/Sites> 
    AllowOverride All 
    Options Indexes FollowSymLinks MultiViews 
    Order allow,deny 
    Allow from all 
    </Directory> 
    RailsBaseURI /railsproj1 
    RailsEnv development 
</VirtualHost> 

nguồn trả lời: http://collab.stat.ucla.edu/users/jose/weblog/9e335/

+0

nhiều nguồn: http://www.modrails.com/documentation/Users%20guide%20Apache.html#deploying_rails_to_sub_uri – dinnouti

+0

Đó là những gì tôi đã làm - nếu tôi không phải chạy trên máy Windows ... –

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