CakePHP: Jeden silnik dla wielu aplikacji

Jak posiadać jedną kopię framework’a dla wielu aplikacji? Standardowe podejście to jeden silnik dla jednej aplikacji. Zakładając, że na serwerze posiadamy 10 aplikacji, w chwili gdy zechcemy zaktualizować silnik, musimy wgrać nową wersję 10 razy. Dodatkowo posiadamy 10 identycznych kopii źródeł CakePHP. Rozwiązaniem tego problemu jest posiadanie jednego silnika CakePHP wykorzystywanego przez wszystkie 10 aplikacji.

Na moim serwerze struktura katalogów wygląda następująco:

~/domains/domena1.pl/public_html/
~/domains/domena2.com/public_html/

W każdym z tych katalogów posiadam 2 działające aplikacje CakePHP, zawartość tych katalogów to:

app/
cake/
plugins/
vendors/
.htaccess
index.php

W momencie, gdy będę chciał zastosować strategię ‚jeden silnik dla wielu aplikacji’, zawartość folderu ograniczy się do:

app/
.htaccess
index.php

Pozostałe foldery zostaną przeniesione do innej dowolnej lokalizacji. W moim przypadku przenoszę je do ~/cakephp_nr_wersji. Otrzymuję przykładowy efekt:

~/cakephp_1_3_10/cake
~/cakephp_1_3_10/plugins
~/cakephp_1_3_10/vendors/

Aby aplikacje wiedziały, gdy znajduje się silnik CakePHP, musimy dokonać modyfikacji pliku app/webroot/index.php
ustawiając stałą CAKE_CORE_INCLUDE_PATH na ścieżkę do katalogu zawierającego katalogi cake i vendors (u mnie jest to linia #53). W wyżej opisanym przykładzie wyglądałoby to następująco:

define('CAKE_CORE_INCLUDE_PATH', dirname(dirname(dirname(ROOT))).DS.'cakephp1_3_10');

Zmiany musimy oczywiście dokonać w każdej aplikacji z osobna, lecz jest to działanie tylko jednorazowe. Możemy pójść krok dalej i wyrzucić zawartość katalogu app bezpośrednio do public_html, ale o tym w oddzielnym wpisie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *