2012-03-07 15 views
5

Ho cercato sul Web, ma sono in grado di trovare solo informazioni sulla condivisione del codice tra più siti e sulla separazione del database in modelli isolati. Questo non è quello che voglio.Più siti in più progetti sullo stesso server di rotaie

Voglio correre un singolo server rotaie, con un unico indirizzo DNS e una singola porta - http://myportal.com - che consente di gestire diversi altri siti - http://myportal.com/site1, http://myportal.com/site2 ecc

voglio ogni sito per avere il proprio dispositivo di piegatura (e repository SCM), è il proprio database, è il proprio instradamento - è il proprio tutto. Cioè - Voglio essere in grado di sviluppare ogni sito come standalone - ciò significa che devo essere in grado di eseguire il sito site1 come http://localhost:3000 e non http://localhost:3000/site1.

Sul server, il sito di root (quello che risponde all'indirizzo http://myportal.com deve essere quello da cui eseguo il server e deve conoscere i percorsi assoluti degli altri siti (che si troveranno in diverse directory sul server, non nelle directory figlio del sito radice) e fornire informazioni di routing per loro - ma dovrebbe anche concatenare agli altri siti file routes.rb. Ciò significa che se vado all'indirizzo http://myportal.com/site1/books/ il sito root deve gestire http://myportal.com/site1 e site1 deve gestire /books/.Il sito di root non dovrebbe essere necessario conoscere le strutture interne di routing degli altri siti

È possibile? In questo momento sto eseguendo il server di rotaie fornito con il em (rails server dalla riga di comando) su un server Windows Server 2008, ma sono disposto a installare un altro server se è quello che è necessario per raggiungere l'obiettivo che ho descritto.

Grazie in anticipo!

risposta

1

Si dovrebbe essere in grado di farlo con Apache o nginx e possibilmente IIS se configurato correttamente. Sono più familiare con Apache e i componenti flessibili mod_rewrite e mod_proxy che possono facilitare questo.

L'idea è di riscrivere http://example.com/ essere http://example.com:3000/ e http://example.com/site2 come http://example.com:3001/site2 e così via.

È anche possibile farlo con Passenger e un uso intelligente della direttiva VirtualHost, ma è possibile che si debba smanettare per ottenere una configurazione che funzioni per voi. Ricorda che la riscrittura delle intestazioni da instradare internamente non ha alcun effetto sul codice HTML risultante che i tuoi server emettono.

+0

Quindi, se ho capito bene, ho bisogno di usare più porte, e di fare il lavoro di routing nel DNS? Non c'è modo di farlo con una singola porta? –

+0

DNS indirizza i client al tuo server. Il server deve instradare internamente le richieste alla porta appropriata. Questo è forse il modo più semplice per scomporre più siti perché la direttiva 'VirtualHost' acquisisce qualsiasi cosa con un nome host specifico per impostazione predefinita, ma solo su una porta specifica. L'utilizzo di più combinazioni host + porta ti dà la flessibilità che desideri. – tadman

+0

OK, ci provo. Hai qualche tutorial decente su VirtualHost in binari? –

0

Creare un link simbolico:

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

modificare file di configurazione di 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> 

fonte Risposta: http://collab.stat.ucla.edu/users/jose/weblog/9e335/

+0

più fonte: http://www.modrails.com/documentation/Users%20guide%20Apache.html#deploying_rails_to_sub_uri – dinnouti

+0

Questo è quello che avrei fatto - se non avessi dovuto eseguire su una macchina Windows ... –

Problemi correlati