2011-02-02 15 views
20

Aquí está mi escenario:Rails, Heroku y Subdominios. ¿Es factible mi caso especial?

Tengo una aplicación que tendrá que soportar múltiples clientes. Cada cliente recibirá un subdominio para su servicio. También tendremos un sitio web de folleto que no tiene la aplicación, es solo un sitio web sobre el producto y cómo los clientes potenciales pueden configurar una cuenta con nosotros.

Dado:

www.mycoolsite.com podría apuntar a una aplicación folleto sobre Heroku. client1.mycoolsite.com, client2.mycoolsite.com y client3.mycoolsite.com habría apuntan a la misma aplicación SaaS que podría decir la diferencia entre cada solicitud y debe ser capaz de manejar lo que sólo ven su fecha (es decir, el establecimiento de un mundial client_id o algo por el estilo)

¿Cómo voy a hacer esto? No he hecho mucho con DNS, así que no tengo ni idea de por dónde empezar con esto.

Gracias.

+1

También estoy teniendo este problema y no he encontrado una solución (incluso contactando con el soporte heroku). Lo más cercano que he encontrado es lo mismo que la respuesta de jpwynns, sin embargo, si estás permitiendo que las personas se registren para un subdominio de tu aplicación SaaS a través de una página de registro, entonces esa página también deberá agregar el subdominio a tu aplicación heroku (puedes t use un comodín ya que chocará con su www y Heroku no lo permite). Esta integración estrechamente unida entre su aplicación y el host puede no ser deseable. Si alguien resuelve esto, seré muy feliz. –

Respuesta

1

No veo que esto sea un problema. Rails ha tenido soporte para subdominios como ese en el pasado con ayuda de gems como subdomain_fu. En Rails 3, el soporte de subdominios está integrado y cubierto por Ryan Bates http://railscasts.com/episodes/221-subdomains-in-rails-3. Echa un vistazo a ese screencast para una buena dirección de dónde empezar. Creo que necesitará el complemento de dominios personalizados para Heroku http://docs.heroku.com/custom-domains.

+0

+1 para el episodio de railscasts. ¡Lo vi justo después de publicar esto y lo encontré realmente útil! – DJTripleThreat

+0

Para la edición revisada: http://railscasts.com/episodes/123-subdomains-revised –

0

Esto no será un problema. Para DNS configure un registro A para mycoolsite.com apuntando al servidor donde desea su aplicación. Configure un registro A para www.mycoolsite.com que esté configurado para heroku. Ahora también querrá redirigir el tráfico que entra en mycoolsite.com sin www y redireccionar al www.mycoolsite.com, esto mantendrá su dominio de nivel superior sirviendo su aplicación de folleto. Una vez que las solicitudes lleguen a su aplicación, puede seguir el tutorial que raidfive vinculado a eso lo ayudará a manejar subdominios dentro de su aplicación.

2

Lo que estás tratando de hacer es muy factible y bastante fácil de hacer.

Necesitará una combinación de registros A y CNAME. En pocas palabras, A registra los nombres de host de mapas en direcciones IP, y los registros CNAME actúan como alias para A registros.

Vamos a suponer que su aplicación SaaS está alojado en 10.0.0.1 y su aplicación en Heroku es 192.168.0.1, y que desea www.mycoolsite.com y mycoolsite.com para apuntar a la misma IP.

(Nota: Yo nunca he organicé nada en Heroku, por lo que la configuración de DNS que puede ser ligeramente diferente)

primero que se necesita es un registro A para el dominio de sí mismo. (He utilizado BIND Zone File Syntax aquí - espero que su proveedor de DNS tiene un sistema de administración mucho más simple.)

mycoolsite.com.  A  192.168.0.1 ; heroku 
www     CNAME mycoolsite.com ; also heroku 

Estos dos registros nos dicen que mycoolsite.com debe apuntar a la dirección IP de Heroku, y que www.mycoolsite.com es un nombre alternativo para mycoolsite.com , que también se resolverá en la dirección IP de Heroku.

Ahora, configuremos el DNS para su sitio SaaS. Usted podría configurar un registro A para cada subdominio, pero si mueve los servidores, tendrá una gran cantidad de direcciones IP para actualizar. La opción más sencilla es configurar una de A registro, a continuación, seleccione subdominios de su aplicación en ello:

sassapp    A  10.0.0.1  ; saas app server canonical name 
client1    CNAME sassapp   ; alias 
client2    CNAME sassapp   ; alias 
client3    CNAME sassapp   ; alias 

A continuación, puede añadir tantos CNAMEs como sea necesario.

+0

+1 discutiendo los registros 'A' y' CNAME'. Necesito aprender más sobre ellos, gracias! – DJTripleThreat

16

Sin sudar. Hacemos eso ahora, en Heroku. Utilizamos Godaddy para el registrador de dominios, pero cualquier panel de control de DNS le permitirá hacer lo mismo.

Las otras explicaciones que leí aquí son un poco más en general, aquí están los detalles ...

La explicación a heroku es muy buena, en: http://docs.heroku.com/custom-domains (incluso hay un muy buen screencast muestra paso a paso)

Lo importante es que si su dominio ROOT (mycoolsite.com) está en Heroku, quiere crear TRES registros "A", porque hacen algo de magia de cruce tolerante a errores. Por lo que tendría un registro para

75.101.163.44 
75.101.145.87 
174.129.212.2 

Ahora para cada subdominio que crear un registro C

www -> proxy.heroku.com 
client1 -> proxy.heroku.com 
client2 -> proxy.heroku.com 
client3 -> proxy.heroku.com 

ahora en el lado Heroku, tiene dos aplicaciones directamente? La 'aplicación de folleto' y la aplicación saas.

inicio de sesión, y para cada aplicación vaya a Recursos -> Addon -> Obtener Más Complementos -> Custom Domains (gratis)

para la aplicación folleto, añadir un dominio: www.mycoolsite.com

para la aplicación SAAS , agregue cada uno de los clientes, p. ej .:

client1.mycoolsite.com 
client2.mycoolsite.com 
client3.mycoolsite.com 

Eso es todo. funciona como un campeón. Que te diviertas.

+0

Wow, gracias por la respuesta de detalles, +1. Voy a probar esto y lo más probable es que acepte esta respuesta cuando llegue a hacer esto hoy. :) – DJTripleThreat

+0

si la dirección pública de su sitio no tiene el 'www', como' twitter.com' en lugar de 'www.twitter.com', y desea hacer también lo que está diciendo (2 aplicaciones, la 'principal 'uno, y di una puesta en escena uno), ¿puedes tener 'site.com' y' staging.site.com' de esta manera? –

+0

Esto realmente debería estar en el Centro de desarrollo Heroku como se indica arriba, en texto, en lugar de solo en formato de video. – chanderson0