2010-03-31 10 views
1

Je développe une application dans RoR qui a des parties statiques et dynamiques. La partie statique est placée dans le dossier public/de l'application. Maintenant, si j'ai un index.html dans mon dossier public, je ne serai pas en mesure d'utiliser les routes configurées dans mes routes.rb Les configurations par défaut comme map.connect /: controller /: action ne seront pas utilisables si j'ai un index.html. J'ai donc supprimé l'index html.Ruby on Rails - Page statique en page de démarrage

Maintenant, j'ai une page statique startpage.html dans mon dossier public/qui doit être la page de démarrage de l'application. Et j'ai des liens pour d'autres pages statiques/dynamiques. L'application RoR est hébergée dans Apache et j'ai essayé de configurer la configuration de l'hôte virtuel en ajoutant le paramètre DirectoryIndex afin que, quand jamais une requête arrive pour le site, elle le dirige vers startpage.html mais il me faut encore le contrôleur par défaut que je l'ai indiqué dans routes.rb avec map.root

Je ne veux pas ajouter un contrôleur factice et d'action et de créer une vue qui a la page de démarrage et configurer routes.rb pour l'utiliser comme la racine . Ce que je cherche à faire ici est

Fondamentalement startpage.html devrait être ma première page dans l'application servie comme une page statique du public/dossier. Cela aura alors des liens vers d'autres pages et contrôleurs/actions

Ici je ne suis pas capable de rediriger apache vers la page html au lieu de transmettre l'application control to rails. Liste de répertoire est également activé en utilisant Options Index mais toujours pas de changement.

N'importe quel pointeur?

Répondre

6

Maintenant, si j'ai un index.html dans mon dossier public alors je ne serai pas en mesure d'utiliser les routes configuré dans mes routes.rb.

Ceci est incorrect. La solution de votre problème consiste à renommer startpage.html en index.html, ce qui entraînera le traitement des demandes / par index.html et toute demande de /:controller/:action sera transmise au moteur Rails Routing. Apache va d'abord servir tout ce qu'il peut trouver dans le répertoire public. Si ce n'est pas disponible, il passe la requête à Rails (c'est ainsi que fonctionne la mise en cache des pages).

Avec index.html en place, vous n'avez pas besoin map.root, car il ne sera jamais demandé (rappelez-vous, Apache sert / avec index.html). Et vous n'avez pas non plus besoin de directives spéciales.

+0

Jonathan, Merci d'avoir signalé l'erreur.J'ai supprimé la configuration map.root de mon fichier de routes, ajouté startpage.html comme index.html. Les choses fonctionnent bien. Y at-il de toute façon que les deux mappages s'excluent mutuellement? Je veux dire seulement pour la première fois quand je tape "/" je devrais obtenir index.html et pour la demande subséquente pour "/" devrait être pris en charge par la configuration map.root. Considérons un exemple de scénario comme une page de connexion. Ainsi, la première page (index.html) est la page de connexion. Donc, une fois connecté, je ne devrais pas être replacé sur la page de connexion quand je demande accidentellement/intentionnellement "/" – meetraghu28

+0

Ce que vous décrivez peut être fait dans un 'root_controller' qui fait office de standard. Renommez index.html en startpage.html. Ajoutez 'map.root: controller =>: root'. Ensuite, dans 'root_controller':' render: file => 'startpage.html'' s'il n'est pas connecté, et 'redirect_to account_path' ou quelque chose quand l'utilisateur * est * connecté. –

+0

Ok, c'est définitivement faisable. Mais je me demande pourquoi nous devons entrer dans un contrôleur ou un moteur de rails pour faire cela. Pour une page d'accueil ou une page de connexion lorsque le contenu est totalement statique, il n'est pas logique d'accéder au moteur des rails, ce qui peut ralentir légèrement le temps de chargement de la page. – meetraghu28

0

Vous pouvez fait une réécriture d'URL de index.html à votre startpage.html

RewriteRule /index.html /startpage.html 
+0

Hey ... en gros ma demande est de mapper/vers /startpage.html J'ai essayé de mapper/vers /startpage.html en utilisant RewriteRule mais la requête atteignait toujours le moteur de rails. – meetraghu28

+0

être clair - req est de mapper "xyz.com/" à "xyz.com/startpage.html" – meetraghu28