2012-03-07 22 views
5

He buscado en la web, pero solo puedo encontrar información sobre cómo compartir código entre varios sitios y sobre cómo separar la base de datos de modelos aislados. Esto no es lo que quiero.Varios sitios en varios proyectos en el mismo servidor de rieles

Quiero ejecutar un solo servidor carriles, con una única dirección DNS y un solo puerto - http://myportal.com - que se encargará de varios otros sitios - http://myportal.com/site1, http://myportal.com/site2 etc.

quiero que cada sitio tiene su propia carpeta (y el repositorio de SCM), es su propia base de datos, su propio enrutamiento: es el propio todo. Es decir, quiero poder desarrollar cada sitio como independiente, eso significa que necesito poder ejecutar el sitio site1 como http://localhost:3000 y no http://localhost:3000/site1.

En el servidor, el sitio raíz (el que responde a la dirección http://myportal.com debe ser el que ejecuto el servidor, y debe conocer las rutas absolutas de los otros sitios (que estarán en diferentes directorios en el servidor, no en los directorios secundarios del sitio raíz) y proporcionar información de enrutamiento para ellos, pero también debe encadenarse a los otros archivos de los sitios routes.rb. Eso significa que si voy a la dirección http://myportal.com/site1/books/, el sitio raíz debe manejar http://myportal.com/site1, y el sitio1 debe manejar /books/. El sitio raíz no debería necesitar información sobre las estructuras de enrutamiento interno de los otros sitios.

¿Es esto posible? En este momento estoy ejecutando el servidor de carriles que viene con el g em (rails server desde la línea de comandos) en un servidor de Windows Server 2008, pero estoy dispuesto a instalar otro servidor si eso es lo que se necesita para lograr el objetivo que describí.

¡Gracias de antemano!

Respuesta

1

Debería poder hacer esto con Apache o nginx y posiblemente con IIS si está configurado correctamente. Estoy muy familiarizado con Apache y los componentes flexibles mod_rewrite y mod_proxy que pueden facilitar esto.

La idea es reescribir http://example.com/ ser http://example.com:3000/ y http://example.com/site2 como http://example.com:3001/site2 y así sucesivamente.

También es posible hacer esto con Passenger y algún uso inteligente de la directiva VirtualHost, pero puede que tengas que buscar otra configuración para ti. Recuerde que reescribir los encabezados para enrutar internamente no tiene efecto en el HTML resultante que emiten sus servidores.

+0

lo tanto, si he entendido bien, necesito utilizar varios puertos, y que haga el trabajo de enrutamiento en el DNS? ¿No hay forma de hacer esto con un solo puerto? –

+0

DNS dirige clientes a su servidor. Su servidor necesita enrutar internamente las solicitudes al puerto apropiado. Esta es quizás la forma más fácil de dividir varios sitios porque la directiva 'VirtualHost' captura todo con un nombre de host específico por defecto, pero solo en un puerto específico. El uso de múltiples combinaciones de puertos host + le brinda la flexibilidad que desea. – tadman

+0

Bien, lo intentaré. ¿Tienes algún tutorial decente sobre 'VirtualHost' en los rieles? –

0

Crear un enlace simbólico:

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

modificar el archivo de configuración de 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> 

fuente Respuesta: http://collab.stat.ucla.edu/users/jose/weblog/9e335/

+0

más fuente: http://www.modrails.com/documentation/Users%20guide%20Apache.html#deploying_rails_to_sub_uri – dinnouti

+0

Eso es lo que habría hecho, si no tuviera que ejecutar en una máquina con Windows ... –

Cuestiones relacionadas