Lua Academy · Lektion

Opbygning af en konfigurations-DSL

Opret et deklarativt konfigurationssprog, der indlæses via dofile() i en sandbox.

Lektion 3 af 413 trin

Opbygning af en konfigurations-DSL er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.

Mål: Deklarativ konfiguration

En konfigurations-DSL lader brugere udtrykke konfiguration på en læsbar, deklarativ måde, samtidig med at Lua's fulde styrke (betingelser, løkker, funktioner) bruges bag kulisserne.

Mønsteret med en konfigurationsfunktion

Stil en config(tbl)-funktion til rådighed, som validerer og gemmer konfigurationen. Kald den med en tabel-literal for at få en ren syntaks.

local function config(tbl)
  -- validate and store
  return tbl
end
-- config.lua:
return config {
  host = "localhost",
  port = 8080,
  debug = os.getenv("DEBUG") == "1",
}

Indlejret konfiguration med sektioner

Understøt indlejrede sektioner, så konfigurationen bliver organiseret.

return config {
  database = { host="db.local", port=5432 },
  cache    = { host="cache.local", ttl=300 },
  logging  = { level="INFO", file="/var/log/app.log" },
}

Hjælpefunktioner i konfigurationen

Tillad kald af hjælpefunktioner i konfigurationen for beregnede værdier.

local function env(name, default)
  return os.getenv(name) or default
end
return config {
  host  = env("DB_HOST", "localhost"),
  port  = tonumber(env("DB_PORT", "5432")),
}

Indlæsning af konfiguration i en sandkasse

Af sikkerhedshensyn skal konfigurationen indlæses i et begrænset miljø, der kun tillader sikre hjælpefunktioner.

local function loadConfig(path)
  local safeEnv = {
    config = config,
    env    = env,
    math   = math,
    table  = table,
  }
  local fn, err = loadfile(path, "t", safeEnv)
  if not fn then error(err) end
  return fn()
end

Validering af skema

Validér obligatoriske felter og typer efter indlæsningen.

local function validate(cfg)
  assert(type(cfg.host) == "string", "host must be string")
  assert(type(cfg.port) == "number", "port must be number")
  assert(cfg.port > 0 and cfg.port < 65536, "port out of range")
end
validate(loadConfig("config.lua"))

Standardværdier

Flet den indlæste konfiguration sammen med standardværdierne for at sikre, at alle obligatoriske nøgler har værdier.

local defaults = {host="localhost", port=8080, debug=false}
local function loadWithDefaults(path)
  local cfg = loadConfig(path)
  for k, v in pairs(defaults) do
    if cfg[k] == nil then cfg[k] = v end
  end
  return cfg
end

Tilsidesættelse via miljøvariabler

Tillad miljøvariabler at tilsidesætte værdier fra konfigurationsfilen — afgørende for udformningen af 12-factor-applikationer.

Konfigurationsarv

Indlæs først en grundkonfiguration, og læg derefter en miljøspecifik konfiguration ovenpå (udvikling, staging, produktion).

Uforanderlig konfiguration

Efter indlæsningen skal du gøre konfigurationstabellen uforanderlig med en __newindex, der udløser en fejl, så utilsigtede ændringer under kørsel forhindres.

Dokumentation i konfigurationen

Brug kommentarer og strukturerede nøgle navne som selvdokumentation. En veldesignet konfigurations-DSL er selvforklarende for DevOps-teams.

Spørgsmål om konfigurations-DSL'er

Hvorfor indlæse en konfigurationsfil med et afgrænset _ENV?

Opsamling: Opbygning af en konfigurations-DSL

Stil en config(tbl)-funktion til rådighed. Understøt indlejrede sektioner og hjælpefunktioner. Indlæs konfigurationen i et sandkassemiljø. Validér obligatoriske felter og typer. Tilbyd standardværdier, og tillad tilsidesættelse via miljøvariabler for at overholde 12-factor-principperne.

Gratis at komme i gang

Lær Lua med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
40
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Opbygning af en konfigurations-DSL” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Opbygning af en konfigurations-DSL”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Opbygning af en konfigurations-DSL”?

Opret et deklarativt konfigurationssprog, der indlæses via dofile() i en sandbox. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lua Academy?

Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Opbygning af en konfigurations-DSL”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lua Academy-lektion?

Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Principper for DSL-design i Lua
  2. Operatoroverbelastning til flydende DSL'er
  3. Opbygning af en konfigurations-DSL
  4. Simpel udtryksparser
← Tilbage til Lua Academy