Napisałem już ogólny post po co komu automatyzowanie niektórych czynności w projekcie. Pora na konkrety.
Nasz skrypt “instalacyjny” siedzi w app/configure/install/install.sh i wygląda tak:
# uprawnienia clear chmod -v 777 ../../tmp/cache chmod -v 777 ../../tmp/logs chmod -v 777 ../../tmp/sessions chmod -v 777 ../../tmp/tests echo "----------------------------------------------------------------------------" cd ../../../cake/console echo "--------------------------------------------------Dropping all tables in DB-----------" php cake.php start_data -drop echo "--------------------------------------------------Updating schema-----------" php cake.php my_schema run update -non-interactive -auto-check echo "--------------------------------------------------Inserting test data-------" php cake.php start_data -fill echo "--------------------------------------------------Generating ACL objects---" php cake.php acl_generate -all echo " "; echo " "; echo " "; echo " "; echo "*********************************************************************TADA!!*" echo "* Instalation complete... *" echo "****************************************************************************"
Pierwsze co to uprawnienia – co chwile przy przenoszeniu na nowy serwer trzeba ustawić tmp do odczytu. Dlatego wrzuciliśmy to do skryptu. Na ten moment – 777 – bo jest to wersja developerska, więc nie zaprzątamy sobie głowy tą kwestią bezpieczeństwa na hostingach współdzielonych. Ale jest to temat na inny post.
czyszczenie bazy z tabel
php cake.php start_data -drop
Jak już pisałem – natrudziłem się gryząc problem migracji bazy danych, bo czym doszedłem do wniosku, że najłatwiej jest usunąć tabele i dodać je ponownie. W takim wypadku MySchemaShell radzi sobie najlepiej. Nie martwimy się o dane w tabelach – dzięki StardDataShell w mgnieniu oka będziemy mieć wypełnioną bazę potrzebnymi danymi.
Update struktury bazy danych
php cake.php my_schema run update -non-interactive -auto-check
MySchemaShell napisałem po to, żeby poradzić sobie z kwestią migracji bazy. Jednak okazało się, że jest to niewdzięczne zadanie, a w połączeniu ze StartDataShell – migracja sprowadza się do ponownego utworzenia tabel w bazie. Jednak ciągle używamy MySchemaShell (zamiast cake’owego SchemaShell) z uwagi na możliwość odpalenia go w trybie nieinteraktywnym. Dzięki temu nie muszę odpowiadać “tak” na każde zapytanie, które SchemaShell chce wywołać.
Wypełnienie bazy danymi
php cake.php start_data -fill
Tutaj nie ma się za bardzo o czym rozpisywać. Jednak możesz napotkać tu kilka kwiatków, jeśli używasz ACLi tak jak my. Behavior ACL podpina swój callback afterSave do modelu. O ile można zrobić disable dla behaviora ACL dla kokretnego modelu, to już trudno odpiąć wszystkie behavior’y z łańcucha powiązań dla tego modelu. Dlatego w sytuacji, gdy Model1 w afterSave() sprawdza coś dla modelu User, do dostajemy warningi, że nie może znaleźć konkretnego węzła ACL, które zostaną utworzone w następnym kroku. Jednak nie ma to wpływu na poprawność instalacji, ani spójność bazy, więc jest to tylko problem “estetyczny”
Wygeneruj ACL’e
php cake.php acl_generate -all
Korzystając z narzędzia AclGenerateShell możesz automatycznie stworzyć ACO’s na podstawie istniejących kontrolerów i ich metod, ARO’s na podstawie zawartości tabeli users, oraz przyznać granty na ACO odpowiednim ARO (granty definiujesz w klasie AclGenerateShell).
Zakończenie
Na pewno zauważyliście jak siermiężne są to skrypty. Mało elastyczne, często z pewnymi sztywnymi założeniami. Jednak dla rozgarniętego programisty dostosowanie ich do swojego projektu nie powinno zająć więcej jak godzinę/dwie. Poza tym mogą zainspirować do stworzenia lepszego zestawu narzędzi. Na moje potrzeby przedstawiony zestaw jest wystarczająco dobry, żeby nie tracić czasu na jego modyfikacje. Mam nadzieję, że to przyniesie Wam pożytek.
Ciekaw jestem co Ty o tym myślisz, podziel się tym w komentarzu.