Wiele domen, jedna aplikacja i Rails

Witam serdecznie,

Obecnie na serwerze mam prosty “endżin” napisany w phpie, który odpowiada za wyświetlanie stron. W praktyce wygląda to tak, że:

  • źródła php (klasy) są w katalogu, który jest niedostępny z poziomu Apache’a i są wspólne dla wszystkich stron;
  • katalog ze stroną ma plik [index.php], w którym robi “include” pliku z klasą i tworzy obiekt, przekazując identyfikator strony do wyświetlenia userowi;
  • za parsowanie urli odpowiadają źródła (nigdzie jednak nie definiuję adresu, pod którą strona jest osiągalna - nie jest to potrzebne, a wszystkie parametry idą jako GET/POST);
  • w katalogu ze stroną są layouty, style, jakieś grafiki właściwe dla strony, itp. itd.
    Zaletą rozwiązania jest to, że mam tylko jedno miejsce, w którym jest cały silnik dla wszystkich stron. Jak potrzeba, to dopisuję rozszerzenia, które są automatycznie widoczne na wszystkich stronach.

I teraz: chciałbym to sobie przepisać na Railsy. W porównaniu z phpem Railsy są znacznie prostsze w zarządzaniu, poza tym dodatki w Railsach i ogólnie cała magia Rubiego to jest to, co jest mi potrzebne. :slight_smile:
Tutaj zaczyna się kłopot, bo właściwie nawet nie wiem, czego konkretnie szukać… Potrzebuję mniej więcej tego:

  1. Chcę mieć jedno miejsce, niedostępne z Apache’a, w którym przechowuję źródła (modele, kontrolery, testy, helpery) i konfigurację (połączenie z bazą, itp.).
  2. Dla każdego katalogu, który jest dostępny z Apache’a, istnieje katalog z widokami (może być dostępny dla Apache’a, może być w tym miejscu, gdzie źródła).
  3. W katalogu jest plik, który jakoś identyfikuje stronę (nie chcę wiązać strony z adresem, pod którym jest dostępna). Na tej podstawie wyświetlane są informacje (odpowiedni widok).

Cały myk polega na tym, że mam 5 witryn, które zachowują się dokładnie tak samo - są natomiast dostępne z kilku różnych domen (i różnych poziomów - np. http://www.poetsofthefall.pl i http://blog.unforgiven.pl/sorrow), mają inne layouty i inne informacje pobierane z (tej samej) bazy danych. Nie widzę sensu w tworzeniu odrębnej aplikacji RoR dla każdej z nich - zwłaszcza, że jak wprowadzę zmiany w jednej, to wiem, że zapomnę je wprowadzić w pozostałych.
Tak na dobrą sprawę potrzebowałbym odpowiednika funkcji “include” z php, sposobu definiowania parametru widocznego dla całej aplikacji (id witryny) oraz ładowania widoków w zależności od tegoż id.

Jeżeli ktoś coś zrozumiał z tego, co napisałem, i potrafiłby mi pomóc - będę bardzo wdzięczny. :slight_smile:

Opisany przez Ciebie model chyba nie bardzo pasuje do Railsów, przynajmniej nie to rozwiązanie, które proponujesz. Wydaje mi się, że prościej byłoby mieć faktycznie pięć instancje aplikacji, ale bazujących na jednym kodzie źródłowym, pobieranym z tego samego repozytorium (ewentualnie katalogi z widokami mogłyby być odrębne w tym sensie, że byłyby traktowane jako svn:external).
Dzięki Capistrano utrzymanie takiej konfiguracji nie powinno stanowić większego problemu.

Inne rozwiązanie, które przychodzi mi do głowy, to zabawa z linkami symbolicznymi w taki sposób, aby jedna aplikacja była widziana w pięciu odrębnych katalogach. Przyznam jednak szczerze, że nie chce mi się wymyślać szczegółów takiego rozwiązania.