dbwebb-se / mvc

Course repo for the mvc and object orientation in frameworks course - mvc.
Other
1 stars 4 forks source link

Hur konfigurera med .env filer till studentservern? #37

Open mosbth opened 3 years ago

mosbth commented 3 years ago

Flera ramverk använder .env filer för att konfigurera "sig". När vi kommer till kmom05 vill man eventuellt ha olika konfigurationer för sin utvecklingsmiljö och för sin produktionsmiljö (studentservern) när det gäller databaskopplingen, iallafall om man kör MySQL/MariaDB.

Grunden för hur .env filer läses in är följande (enligt Symfonys kommentarer i sin egen .env fil).

.env                contains default values for the environment variables needed by the app
.env.local          uncommitted file with local overrides
.env.$APP_ENV       committed environment-specific defaults
.env.$APP_ENV.local uncommitted environment-specific overrides

Jag har bett IT-helpdesk om att sätta APP_ENV="student" på studentservrarna. När det är klart så kan du alltså skapa följande två filer för att hantera din konfiguration på den servern.

* .env.student       committed environment-specific defaults
* .env.student.local uncommitted environment-specific overrides

Dessutom, förutsatt att du har gjort en dbwebb update, så kommer filer som heter .env*.local att inte laddas upp till studentservern. De filerna är alltså lokala för din egen server. Undantaget är filen .env.student.local som kommer att laddas upp till studentservern.

Vill du läsa mer om hur detta fungerar och hur olika ramverk kan ha olika syn på detta så kika i följande.

Laravel säger i sin dokumentation att man inte skall checka in .env. Men följer man de rekommendationer som finns i Ruby DotEnv samt i Symfonys manual så går det utmärkt att checka in .env, jag tycker det låter som en bra idé. Men man måste ha koll på var man placerar sina hemlisar.

I README för Ruby DotEnv finns en tabell som visar ordningen för konfigurationsfilerna samt med rekommendationer för vilka filer som bör checkas in till Git och vilka man inte bör checka in, givet att man följer rekommendationerna och alltid har sina hemligheter i filerna som slutar med .local.

mosbth commented 3 years ago

Nu har IT fixat så att följande stämmer på studentservrarna:

sweet~: echo $APP_ENV
student
datalowe commented 3 years ago

Jag använder Laravel och har testat den här lösningen med det. Laravel själva nämner inte i sin dokumentation tekniken att använda en $APP_ENV-miljövariabel, men samtidigt bygger Laravel på Symfony. Det visade sig nu när jag testade att Laravel måste använda den här biten av Symfony, eftersom .env.student används på dbwebb som väntat.

Jag har ett fåtal enhetstester som rör vid databasen, något som är ganska ovanligt vad jag nu förstått. Ett problem med '.env.student' mm som uppstår i fall som mitt är att när man kör phpunit-tester (php artisan test eller make phpunit) så görs det i en separat miljö alt på ett alternativt sätt så att $APP_ENV inte är tillgänglig/används, även om man försökt att initiera miljövariabeln i samma terminal först. Därför får man felmeddelanden för databasrelaterade tester ifall man inte också har en fil döpt till .env, med lämpliga specifikationer för testning.

mosbth commented 3 years ago

Ett problem med '.env.student' mm som uppstår i fall som mitt är att när man kör phpunit-tester (php artisan test eller make phpunit) så görs det i en separat miljö alt på ett alternativt sätt så att $APP_ENV inte är tillgänglig/används, även om man försökt att initiera miljövariabeln i samma terminal först.

Det står lite om liknande saker här (påverka APP_ENV från phpunit): https://stackoverflow.com/questions/45922358/why-phpunit-is-not-getting-the-correct-app-env-as-specified-in-phpunit-xml

Men när jag testar så är miljöns värde på APP_ENV även synlig när man kör enhetstester med make phpunit.

Men det borde inte vara ett bekymmer kopplat till studentservern eller till .env.student eller .env.student.local då vi inte kör enhetstesterna på den maskinen.

En variant är att man jobbar med .env.test och .env.test.local med specifika inställningar för test. Så som det är beskrivet i "grundkoden" för ursprunget till dotenv: https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use

mosbth commented 2 years ago

Här kan man testa att APP_ENV är satt till rätt värde student på studentservern. https://www.student.bth.se/~mosstud/test/env.php

mosbth commented 2 years ago

Inuti sin kontroller kan man även kolla vilka värden som gäller för tillfället.

echo $_ENV['APP_ENV'];
echo $_ENV['DATABASE_URL'];
mosbth commented 2 years ago

Nu har IThelpdesk fixat så att APP_ENV har sitt rätta värde både på ssh.student och på www.student.

Det innebär i korthet följande.

Om man vill ha andra inställningar på studentservern så kan man skapa följande två filer som enbart läses in på ssh.student och www.student. Dessa båda filer läses in efter att ovan filer är inlästa så de skriver över eventuella inställningar som gjorts.

Normalt tänker man att de filer som slutar på .local kan innehålla känsliga detaljer och de skall inte checkas in till Git repot.