2010-02-22 6 views
2

J'ai une application Rails qui a une configuration similaire à Tumblr, c'est-à-dire que vous pouvez avoir: (1) Hébergement de sous-domaine (nom-utilisateur.monapp.com) (2) Hébergement de domaine (your-username.com)Prise en charge de plusieurs domaines/sous-domaines dans Rails

Les deux transmettraient à un site Web personnalisé pour cet utilisateur, créé avec mon application.

Comment puis-je accomplir cela dans Rails? J'ai pu obtenir (1) travailler avec subdomain-fu, mais je ne suis pas sûr de savoir comment travailler (2). Tous les pointeurs (plugins, gemmes, tutoriels), etc. seraient très utiles, je n'arrive pas à en trouver.

Merci!

Répondre

3

Le principe pour les domaines est le même que le sous-domaine - trouver le domaine, mapper à un compte.

Les détails dépendent de la manière dont votre hébergement va gérer le DNS. Je suis actuellement en train d'utiliser Heroku et son service générique. Dans ce cas, le domaine est mappé avec un nom de c vers le sous-domaine hébergé par mon application Heroku. De là, je peux travailler sur le compte associé et les détails.

2

EDIT: Je l'ai trouvé un moyen bien plus simple: http://www.arctickiwi.com/blog/7-host-and-domain-based-routing-in-ruby-on-rails

Pas exactement une réponse mais c'est le meilleur que je peux donner. Peut-être que ça t'aidera aussi.

Idéalement, this blog post from transfs.com et sous-domaine-fu devrait faire l'affaire. J'ai essayé de l'implémenter, cependant, et ils ne semblent pas bien jouer ensemble. Fondamentalement, si je n'inclus pas l'initiateur, la route de sous-domaine fonctionne correctement. Si j'inclus l'initialiseur, la route du sous-domaine est interrompue (tout est intercepté par map.root). J'ai le sentiment que c'est avec la façon dont il construit la chaîne de condition dans l'initialiseur. Si vous pouvez comprendre comment cela se brise, alors vous aurez une application qui fonctionne.

Mon initialiseur:

 
module ActionController 
    module Routing 
    class RouteSet 
     def extract_request_environment(request) 
     env = { :method => request.method } 
     env[:domain] = request.domain if request.domain 
     env[:host] = request.host if request.host
env end end class Route alias_method :old_recognition_conditions, :recognition_conditions def recognition_conditions result = old_recognition_conditions [:host, :domain].each do |key| if conditions[key] operator = "===" if conditions[key].is_a?(Regexp) operator = "=~" end result << "conditions[:#{key.to_s}] #{operator} env[:#{key.to_s}]" end end result end end# end class Route end end

Mes itinéraires (seulement pour le développement). Vous verrez mon domaine de développement local, stiltify.dev. Désolé, j'ai essayé de faire en sorte que ça soit bien, mais je n'ai pas réussi à avoir un bloc de code sympa. Je le mets sur pastie à la place: http://pastie.org/940619.

La section des commentaires dans Ryan Bates' screencast a été très utile, et m'a permis de comprendre le sous-domaine => false et les autres erreurs dans lesquelles ils se trouvaient. Je n'ai toujours pas résolu le problème!

Questions connexes