# Environments

URL: https://docs.ablyft.com/de/developers/installation/environments/

> Führe ein Experiment auf mehreren Websites, Sprachen oder Stages aus und lege per Regel fest, wo es gilt.



Mit Environments führst du dasselbe Experiment auf mehreren Websites oder auf verschiedenen Versionen einer Website aus,
ohne dein Project zu duplizieren. Deine Pages, Audiences und Goals werden einmal definiert und überall wiederverwendet.

Typische Beispiele:

* Eine Live-Site und eine Staging-Site
* Regionale oder sprachliche Sites, zum Beispiel `us`, `uk` und `ca`
* Eine Site, die auf mehreren Subdomains ausgeliefert wird

## So funktioniert es

1. **Erstelle** ein Environment in deinem Project und gib ihm eine Regel: ein kurzes Stück JavaScript, das auf den Sites,
   auf denen das Environment gilt, `true` zurückgibt.
2. **Weise** das Environment deinen Experiments **zu**.
3. **Zur Laufzeit** prüft das Snippet zuerst die Bedingungen der [Page](https://docs.ablyft.com/de/guides/audiences-and-delivery/pages/). Dann
   prüft es für jedes Experiment die Regeln der Environments des Experiments und anschließend die
   [Audiences](https://docs.ablyft.com/de/guides/audiences-and-delivery/audiences/). Siehe die [Snippet sequence](https://docs.ablyft.com/de/developers/installation/snippet-sequence/).

Ein Experiment ohne Environment ist nicht eingeschränkt. Bei mehreren Environments genügt eine zutreffende Regel. Die
vollständige Tabelle zum Matching findest du im [Environments-Guide](https://docs.ablyft.com/de/guides/audiences-and-delivery/environments/#assign-environments-to-an-experiment).
Eine leere Regel trifft immer zu.

## Environments erstellen und zuweisen

Wie du ein Environment erstellst (Felder, API Name, Default-Environment, Code Helper) und es Experiments zuweist, ist im
[Environments-Guide](https://docs.ablyft.com/de/guides/audiences-and-delivery/environments/#create-an-environment) beschrieben. Der **API Name**
wird im Dateinamen des [Sub-Snippets](#sub-snippets) verwendet.

## Die Regel schreiben

Die Regel ist der Body einer JavaScript-Funktion. Gib `true` zurück, wenn das Environment gilt, sonst `false`
(oder nichts).

```js
// The environment applies on every page
return true;
```

In der Regel kannst du die [Tools](https://docs.ablyft.com/de/developers/reference/javascript-api/tools/) verwenden, verfügbar als `ablyftTools`.
[`ablyftTools.parseUrl()`](https://docs.ablyft.com/de/developers/reference/javascript-api/tools/#parseurl) zerlegt die aktuelle Adresse in
`subdomain`, `domain` und `tld` (und mehr). Für `www.example.com` lautet das Ergebnis `www`, `example` und `com`.

**Nach Subdomain.** Für eine Site wie `en.mystore.com`:

```js
return ablyftTools.parseUrl().subdomain === 'en';
```

**Nach Domain und Top-Level-Domain.** Für regionale Shops auf verschiedenen Domains:

```js
const { domain, tld } = ablyftTools.parseUrl();
return domain === 'mystore' && tld === 'co.uk';
```

**Live versus Staging.**

```js
// Live: the production host. Staging: everything else.
return ablyftTools.parseUrl().hostname === 'www.mystore.com';
```

**Nach einem Attribut in der Seite**, etwa der Sprache des HTML-Dokuments:

```js
return document.documentElement.lang === 'de';
```

Das solltest du beachten:

* Die Regel wird etwa **2 Sekunden** lang wiederholt geprüft, sie kann also auch von Inhalten abhängen, die kurz nach dem
  Laden der Seite erscheinen.
* Wenn die Regel einen Fehler wirft, wird der Fehler protokolliert und das Environment gilt als **nicht zutreffend**.
* Halte Regeln kurz und frei von Seiteneffekten. Sie laufen bei jedem Seitenaufruf.

Wenn dasselbe Experiment auf mehreren Domains laufen soll, stelle sicher, dass seine Pages nicht von einer Domain
abhängen, siehe [Match types](https://docs.ablyft.com/de/guides/audiences-and-delivery/pages/#match-types).

## Sub-Snippets

Standardmäßig enthält das [Haupt-Snippet](https://docs.ablyft.com/de/developers/installation/snippet/) alle laufenden Experiments, und jedes
Experiment prüft seine eigenen Environment-Regeln. Wenn du für ein Environment **Create a sub-snippet** aktivierst,
erstellt ABlyft zusätzlich ein Snippet, das **nur die Experiments dieses Environments** enthält.

Verwende ein Sub-Snippet, wenn du auf einer bestimmten Site weniger Daten laden möchtest. Du findest es unter **Settings →
Snippet → Sub-Snippets**. Der Name enthält den API Name des Environments:

```html
<script src="https://cdn.ablyft.com/s/12345678-staging.js"></script>
```

Die Environment-Regeln werden auch in einem Sub-Snippet geprüft. Binde auf einer Seite entweder das Haupt-Snippet oder ein
Sub-Snippet ein, nicht beides: Ein zweites ABlyft-Snippet auf derselben Seite wird ignoriert.

## Bearbeiten und löschen

Das Bearbeiten und Löschen von Environments sowie die erforderlichen Rollen sind im
[Environments-Guide](https://docs.ablyft.com/de/guides/audiences-and-delivery/environments/#edit-or-delete-an-environment) beschrieben.

## Fehlerbehebung

Wenn ein Experiment auf einer Site nicht läuft und seine Page zutrifft, prüfe als Nächstes das Environment, denn es wird
vor den Audiences getestet:

1. Sind dem Experiment Environments zugewiesen? Wenn ja, gibt die Regel mindestens eines davon auf dieser Seite `true`
   zurück?
2. Wirft die Regel einen Fehler? Fehler zählen als "nicht zutreffend".
3. Verwenden die Pages des Experiments relative URLs?
4. Schalte den Debug-Modus ein und öffne die Browser-Konsole. Sie zeigt, ob ein Environment gültig ist. Nur wenn
   mindestens ein Environment gültig ist, fährt das Snippet mit den Audiences fort. Siehe [Debugging](https://docs.ablyft.com/de/developers/debugging/).

## API-Zugriff

Die Environments eines Projects können über die REST API gelesen werden (`projects/{project}/environments`, nur lesend).
Experiment-Endpoints akzeptieren eine Liste `environments` mit Environment-IDs. Siehe die
[REST API](https://docs.ablyft.com/de/developers/reference/rest-api/).

