Open mosbth opened 3 years ago
Nu har IT fixat så att följande stämmer på studentservrarna:
sweet~: echo $APP_ENV
student
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.
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
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
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'];
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.
.env
läses alltid in, lokalt och på studentservern.env.local
läses alltid in, både lokalt och på studentservernOm 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.
.env.student
denna filen går bra att committa till Git repot och skall inte innehålla några känsliga detaljer..env.student.local
kan innehålla känsliga detaljer som databas-kopplingar men denna filen skall inte checkas in till Git repot.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.
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).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.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
.