Automatyzacja – szczegóły (cakePHP)

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.

Share Button

Leave a Reply

Your email address will not be published. Required fields are marked *