Skip to content

Fejlesztői tudnivalók

Bertalan Fodor edited this page Sep 9, 2022 · 50 revisions

Fejlesztőkörnyezet telepítése

Laravel Homestead

A legegyszerűbb a Laravel Homesteadet használni, így nem kell a gépedre PHP-t, MySqlt, webszervert telepíteni, hamem egy virtuális gépet rakunk fel, ami minden szükséges alkalmazást tartalmaz, megfelelően konfigurálva. A telepítés menete:

  • valahova szedd le a kódot gittel (pl. c:\prog\www\szentiras.hu)
  • Telepítsd a VirtualBoxot és a Vagrantot
  • csinálj egy homestead könyvtárat valahol (pl. c:\prog\www\homestead)
  • ott add ki a vagrant box add laravel/homestead parancsot
  • ugyanitt git clone https://github.com/laravel/homestead.git .
  • majd git checkout v6.3.0 -b v6.3.0
  • bash init.sh
  • A Homestead.yaml-ot állítsd be:
    folders:
        - map: c:/prog/www/szentiras.hu 
          to: /home/vagrant/szentiras-hu 

    sites: 
        - map: dev.szentiras.hu 
          to: /home/vagrant/szentiras-hu/public 
      
    databases: 
        - bible 
    
    variables: 
        - key: APP_ENV 
          value: local
  • vagrant up

Ezzel létrejön egy virtuális gép, amin minden szükséges dolog telepítve van és egy csökkentett tartalmú tesztadatbázis.

  • az after.sh-t le kell futtatni utólag (a homestead-be berakni elég törékeny sajnos)
  • Adatbázis feltöltése fordításokkal / versekkel helyi fájlból: A virtuális gépre belépve (vagrant ssh, cd szentiras-hu): php artisan szentiras:updateTexts Ahhoz hogy ez működjön, be kell állítani a dropbox linket a szövegforrás fájlhoz (a dl=0 paramétert dl=1-re lecserélni) a .env fájlban.

WSL (Windows Subsystem for Linux)

sudo apt update
sudo apt install php
sudo apt install mysql-server
sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo add-apt-repository ppa:ondrej/php
sudo apt install php5.6
curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh -o install_nvm.sh
bash install_nvm.sh
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
nvm install v6.2.2
sudo apt install php5.6-xml
sudo apt install php5.6-zip
sudo apt install php5.6-gd
sudo apt install php5.6-mbstring
sudo apt install php5.6-mysql
sudo apt install php5.6-curl
cp .env.example .env
sudo mysql < ./tmp/database.sql
echo '[mysqld]' | sudo tee /etc/mysql/conf.d/szentiras-hu.cnf
# TODO ez nem mukodik MySQL 8-nal, echo 'query_cache_type=1' | sudo tee --append /etc/mysql/conf.d/szentiras-hu.cnf
echo 'default_authentication_plugin=mysql_native_password' | sudo tee --append /etc/mysql/conf.d/szentiras-hu.cnf
sudo service mysql start
sudo mysql
CREATE USER 'homestead'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret';
GRANT ALL PRIVILEGES ON *.* TO 'homestead'@'localhost';
exit;
source install-dev.sh
sudo service mysql restart
sudo apt-get install -y hunspell
sudo apt-get install -y hunspell-hu
php5.6 artisan migrate -n
-> .env-be beirni a dropbox linket (de dl=0 helyett dl=1 kell)

php5.6 artisan szentiras:updateTexts
php5.6 artisan serve

Javasolt IDE

Néhány vegyes gondolat

  • continuous deployment van, azaz:
    • push után a travis-ci.org/borazslo/szentiras.hu
      • letölti a függőségeket
      • létrehozza az adatbázist
      • lefuttatja a séma manipuláló migrationöket és a data seedert (ami a tesztadatokat tölti be)
      • lefuttatja a teszteket
      • sikeres tesztek esetén felpusholja a staging environmentbe az aktuális állapotot
    • a master branch kerül ki a staging környezetbe (staging.szentiras.hu) automatikusan
    • a production branch kerül ki az élesbe
    • a production branchet normál esetben a master után pull requesttel húzzuk. A pull requestet a travis lefordítja, leteszteli, és ha zöld, akkor a pull request merge-ölése után megint travis, és az feltolja élesbe
    • van egy git hook, ami push után
      • leállítja a webkiszolgálót
      • átáll az új kódra
      • letölti a függőségeket
      • lefuttatja a migrationöket (a seedert nem, hiszen azok csak az integrációs tesztek adatai)
      • elindítja a webkiszolgálót
  • fontos, hogy az adatbázisséma minden módosítása migration legyen
    • feltöltés előtt tesztelni kell, ehhez --env=testing beállításnál használható a migration:refresh (ami az összes saját táblát eldobja és újrahúzza)
    • a data seederben csak az integrációs tesztek adatai vannak, a sémaváltozással összefüggő default adatbetöltés, legacy migráció stb. helye a migrationökben van (bármit is mond a laravelbook.com meg mások), hiszen azok az adatok abszolút függenek az aktuális sémaverziótól.
  • A tesztelésről
    • a célunk, hogy minél többen kapcsolódjanak be a fejlesztésbe
    • egy ilyen open source projektnél különösen fontos, hogy sok automatizált teszt legyen
      • unit testek: live függőségek nélkül, minden service-t (adatbázis, mailer, dropbox etc.) mockolva
      • integrációs tesztek: előre vagy a teszt közben bekonfigurált teszt-service-ekkel
      • funkcionális tesztek: Selenium
  • Code review
    • fontos, hogy jó minőségű kód kerüljön be, DRY, SOLID, KISS
  • Code conventions, practices
    • PSR-1 és PSR-2
    • dependency injection (a tesztelés segítésére)
  • Angol kód, kommentek, commit üzenetek
    • angol nyelven csinálunk mindent, aminek köze van a kódhoz, erre volt már szükség pl. amikor az egyik library-be bug reportot küldtünk és a kijavításhoz a fejlesztőnek rá kellett nézni a mi kódunkra

Hyper-V és Vagrant Windows 10-en

Ha Hyper-V-t és emelett Laravel Homesteadet is szeretnél használni, kell egy kis kavarás, mivel a Hyper-V és a VirtualBox ütik egymást.

A Laravel Homestead egyelőre nem támogatja a hyperv-t, ezért a következők a teendők:

  • https://code.johnpbloch.com/2015/07/laravel-homestead-on-hyperv/
  • Hyper-V managerben kell egy új Internal switch
  • a Windows Settings > Network & Sharing Centerben az internetkapcsolatot meg kell osztani az imént létrehozott virtuális kapcsolattal (ettől lesz majd a Hyper-V-s gépünknek IP-címe)
  • a Homestead.rb fájlt át kell írni, hogy a virtuális gép által látott IP-címmel próbálja a megosztott könyvtárt megosztani:
    • blabla
    • config.vm.synced_folder ... blabla ... smb_host: "a te hosztneved", **options
    • config.vm.synced_folder '.', '/home/vagrant', disabled: true