← Webbserverprogrammering 1 Område 8 · Driftsättning, API och externa data Felsökning

Webbserverprogrammering 1 · område 8 · v.15–17

Driftsättning, API och externa data

Applikationen lämnar din dator. Den får en riktig adress med HTTPS, där andra kan nå den, och den lär sig prata med andra servrar: den hämtar data från ett externt API, och har ett eget som svarar med JSON. Området är kort och intensivt – och ligger före slutprojektet med avsikt, så att ingen driftsätter för första gången kvällen före sista inlämningen.

1. Fem lektioner

Tre genomgångar, ett arbetspass och en redovisning. Kolumnen längst till höger säger vad du gör om du var borta.

#DatumLängdVad vi görMissade du passet?
57ons 14 apr45 min Från utvecklingsmiljö till drift. Development mot Production, inställningarna som miljövariabler, och migrationerna på servern. Projekt 3 delas ut, och du skaffar ett Azure-konto. Guiden steg 1–6 och etapp 1 – klar före tisdag
58tis 20 apr85 min Driftsättning. Webbappen i Azure, inställningarna, zippen – och loggen när det går fel. Alla driftsätter, och länken delas i klassen. Guiden steg 7–12 och etapp 2
59ons 21 apr45 min JSON, API:er och samspelet klient–server. Ett eget API, en klient mot Wikipedia, och vad sidan gör när API:et inte svarar. Guiden steg 13–19
60tis 27 apr85 min Arbetspass. API-funktionen, driftdokumentationen, och kontrollen av att inga hemligheter ligger i repot. Etapp 3, och guiden steg 20–21
61ons 28 apr45 min Redovisning: applikationerna live. Tre minuter var, på din adress. Etapp 4, med redovisningens fem punkter – säg till, så får du redovisa senare

2. Det här ska sitta

3. Det som inte följer med

Mycket av det som fungerar på din dator gör det för att din dator har något servern saknar. Det här är skillnaderna som ställer till det:

På din datorPå servernGuiden
launchSettings.json säger DevelopmentFilen finns inte. Miljön är ProductionSteg 1
Lösenorden ligger i user-secretsuser-secrets läses inte. Lösenorden måste komma som inställningarSteg 2
Du kör dotnet ef database updateDet finns inget dotnet ef. Applikationen får köra migrationerna självSteg 3
Felen syns i terminalen och i webbläsarenFelsidan visar inget. Felet finns i loggen – om du slagit på denSteg 11
Databasen ligger i projektmappenDen måste ligga i D:\home, annars är den borta efter nästa publiceringSteg 9
Prova driften hemma innan du provar den i Azure

Guidens steg 6 kör det publicerade programmet på din egen dator, i Production, med inställningarna som miljövariabler. Fungerar det där har du uteslutit hälften av det som kan gå fel på servern. Fungerar det inte där fungerar det inte på servern heller – och felet tar fem minuter att hitta hemma i stället för ett helt pass.

4. Kom igång

Du börjar inte om. Området bygger vidare på ditt projekt från område 7.

StegDet du gör
1Starta ditt projekt. Logga in som din admin, logga ut, och försök nå en sida som ändrar data – du ska hamna på inloggningen.
2Committa och pusha allt. Det du driftsätter ska vara det som ligger i repot.
3Skaffa ett konto i Azure for Students, med din skolmejl. Gör det första dagen – verifieringen kan ta tid.
4Läs uppgiften, och fyll i guidens översättningstabell.
5Gör etapp 1 före tisdag 20 april.

Publicera och packa, från projektmappen:

dotnet publish -c Release -o ..\publicera
tar -a -c -f ..\projekt.zip -C ..\publicera *

Så ser det ut bredvid din projektmapp efteråt. Varken publicera eller zippen hör hemma i repot:

DittProjekt/         repot – här ändras ingenting
publicera/           det som ska köras på servern
projekt.zip          publicera/ packad, med innehållet i roten

5. Felsökning

Sök på felmeddelandet du fick, eller på ett ord ur det. Kolumnen var säger om felet syns på din dator, i Azure, eller i ditt API. Den fullständiga tabellen står i guiden.

15 rader

SymptomVarTrolig orsakÅtgärd
Hosting environment: Development fast du satt Productiondin datorlaunchSettings.json sätter tillbaka Developmentdotnet run --no-launch-profile. Steg 2.
Sidan utan CSS, .styles.css svarar 500din datordotnet run i ProductionProva med det publicerade programmet. Steg 6.
Det gick inte att hitta en del av sökvägen från Compress-Archivedin datorSökvägen är längre än 260 teckentar. Steg 5.
SQLite Error 14: 'unable to open database file'bådaDatabasens mapp finns inte, och migrationerna är avstängdaDatabas__MigreraVidStart = true. Steg 3.
skapades inte: lösenordet saknas i konfigurationenbådaInställningens namn stämmer inteDubbla understreck. Jämför med nyckeln i user-secrets.
skapades inte: Passwords must have at least one digitbådaLösenordet bryter mot reglernaMinst åtta tecken, en siffra, en versal.
Nästa dotnet run är också i Productiondin datorMiljövariabeln lever kvar i terminalfönstret$env:ASPNETCORE_ENVIRONMENT = $null, eller ett nytt fönster.
Azures väntsida i stället för din applikationAzureZippen kom inte upp, eller innehållet ligger i en undermappÖppna zippen: web.config ska ligga i roten. Steg 10.
HTTP Error 500.30 – ASP.NET Core app failed to startAzureApplikationen kastade ett undantag när den startadeLog stream. Steg 12.
Datan är borta efter en ny publiceringAzureDatabasen ligger utanför D:\homeAnslutningssträngen. Steg 9.
Första sidan tar lång tidAzureGratisnivån stänger av appen efter en stund utan trafikNormalt. Den vaknar vid nästa förfrågan.
Ett id som inte finns ger en HTML-sidaditt APIResults.NotFound() – en tom 404 görs om till din inte-hittad-sidaResults.Problem. Steg 15.
Rutan med datan från det externa API:et syns aldrigditt APIFel adress, eller svaret har andra fältnamnÖppna API-adressen i webbläsaren. Stämmer fälten med ditt objekt?
Sidan tar länge att visa när API:et inte svararditt APIIngen tidsgräns – förvalet är 100 sekunderklient.Timeout. Steg 16.
git grep hittar ett lösenordrepotDet står i koden eller i appsettings.jsonFlytta det till user-secrets, och byt lösenordet i drift. Steg 20.

6. Orden

Orden nedan används från och med nu utan förklaring, och kommer tillbaka i slutprovet.

Ordträning

OrdBetyder
miljöDevelopment på din dator, Production på servern. Styrs av ASPNETCORE_ENVIRONMENT.
miljövariabelEn inställning som operativsystemet ger programmet när det startar. Ligger utanför koden och utanför repot.
dotnet publishBygger det som ska köras på servern – utan källkod, utan testprojekt.
driftsättningAtt få en applikation att köra på en server, åtkomlig för andra.
App ServiceAzures tjänst för webbapplikationer. Du lämnar programmet, Azure kör det.
loggDet applikationen skriver om vad den gör. I drift det enda stället där ett fel syns.
APIApplication Programming Interface – ett gränssnitt som program anropar, inte människor.
RESTEtt sätt att bygga API:er: adresserna är resurser, och HTTP-metoden säger vad som ska göras.
JSONTextformatet API:er oftast svarar med. {"titel":"Gökboet","ar":1975}.
statuskodSiffran i svaret som säger hur det gick. 200 gick bra, 404 finns inte, 500 servern föll.
problem detailsStandardformen för ett fel i ett JSON-API: typ, rubrik, statuskod och förklaring.
HttpClientKlassen som skickar förfrågningar från din server till en annan.
typad klientEn egen klass som får en färdig HttpClient injicerad, registrerad med AddHttpClient.
tidsgränsHur länge HttpClient väntar på ett svar innan den ger upp. Förvalet är 100 sekunder.
svarsobjektDet ett API lämnar ut, i stället för entiteten. Bestämmer vilka fält som blir offentliga.