Ruby on Rails – jedna aplikacja z wieloma domenami (Dreamhost + Passenger)

Jakiś czas temu sporo namęczyłem się z odpaleniem jednej aplikacji RoR tak by działała na wielu domenach równocześnie (i dla każdej z nich troszkę inaczej się zachowywała. Całość to sieć sklepów internetowych sprzedających różne systemy antywirusowe z jedną bazą danych i jednym panelem administracyjnym).

Niestety nie posiadam własnej maszyny a tylko współdzielony hosting na DreamHost.com więc uciec się musiałem do kilku prostych sztuczek. Po pierwsze uruchomić mod_rails na każdej subdomenie, po drugie utworzyć symlinki z katalogów subdomen na katalog z aplikacją. Wystarczyło na katalog “public” – jednak nie wiem czy to najlepszy pomysł gdyż podczas prób mod_rails kilka razy się wywalił… jeśli ktoś wymyśli lepszy pomysł to bardzo proszę o maila :) – może było by zsymlinkować cały katalog z aplikacją?.

Wykrywanie domeny przez którą klient łączy się ze sklepem również do trudnych nie należało, w app/application.rb mam funkcję która inicjalizuje zmienną @strona (którą później używam do wczytania odpowiedniej konfiguracji)

@strona = Site.find_by_host(request.host)

  • Site – moja tabela w bazie danych gdzie trzymane są ustawienia dla różnych domen
  • find_by_host – szukanie po odpowiedniej kolumnie gdzie są zapisane domeny
  • request.host – zmienna w której zapisany jest host przez który się łączymy ze stroną

2 Comments

filmy onlineAugust 29th, 2009 at 10:54 pm

Dość dobry sposób, może tak zostać. Też tak robię. Swego czasu kilka aplikacji tego typu napisałem w PHP.

Drugim, trochę szybszym jednak trochę mniej dynamicznym rozwiązaniem jest utworzenie pliku konfiguracyjnym w którym przechowujemy ID jako integer – strony i po prostu robić zapytania w stylu:
Site.find_by_site_id( config[:site_id] )

Jest wiele tego typu możliwości, moje jest lekko bardziej wydajne, jednak to twoje wydaje się bardziej wygodne.

Pozdrawiam,
Mateusz (name specjalnie inny dlatego, że chcę sobie wypozycjonować stronę.;))

ad@mSeptember 8th, 2009 at 10:41 pm

Miło że ktoś tu zajrzał :),

sprawę “wywaleń się aplikacji” namierzyłem – była to kwestia logów. Wiele aplikacji próbowało równocześnie pisać do tego samego pliku log/proguction.log . (to moje podejście nie jest niestety najlepsze.. wymaga co najmniej zmienienia poziomu logowania – jednak na razie działa :) ).

Ciekawy pomysł na rozwiązanie tego problemu można znaleźć na: http://railscasts.com/episodes/94-activeresource-basics .

Leave a comment

Your comment