Aktualisieren von Weblate#

Aktualisieren des Docker-Images#

Das offizielle Docker-Image (siehe Installation über Docker) hat alle Aktualisierungsschritte für Weblate integriert. Außer dem Abrufen der neuesten Version sind normalerweise keine manuellen Schritte erforderlich.

Allgemeine Upgrade-Anweisungen#

Bevor Sie ein Upgrade durchführen, überprüfen Sie bitte die aktuellen Softwareanforderungen, da sich diese geändert haben könnten. Sobald alle Anforderungen installiert oder aktualisiert sind, passen Sie bitte Ihre settings.py an die Änderungen in der Konfiguration an (siehe settings_example.py für korrekte Werte).

Prüfen Sie vor dem Upgrade immer die versionsspezifischen Anweisungen. Bitte folgen Sie den Anweisungen für alle Versionen, die sie eventuell beim Upgrade überspringen. Manchmal ist es besser, ein Upgrade auf eine Zwischenversion durchzuführen, um eine reibungslose Migration zu gewährleisten. Upgrades über mehrere Versionen hinweg sollten funktionieren, sind aber nicht so gut getestet wie Upgrades einzelner Versionen.

Bemerkung

Es wird empfohlen, vor dem Upgrade eine vollständige Datenbanksicherung durchzuführen, damit Sie bei einem fehlgeschlagenen Upgrade die Datenbank zurücksetzen können, siehe Sichern und Verschieben von Weblate.

  1. Die Prozesse wsgi und Celery beenden. Das Upgrade kann inkompatible Änderungen an der Datenbank vornehmen, daher ist es immer sicherer, alte Prozesse während des Upgrades nicht laufen zu lassen.

  2. Den Weblate-Code aktualisieren.

    Bei Pip-Installationen kann dies erreicht werden durch:

    pip install -U "Weblate[all]==version"
    

    Oder wenn Sie einfach nur die neueste Version erhalten möchten:

    pip install -U "Weblate[all]"
    

    Wenn Sie nicht alle optionalen Abhängigkeiten installieren möchten, tun Sie dies:

    pip install -U Weblate
    

    Beim Git-Checkout müssen Sie den neuen Quellcode abrufen und Ihre Installation aktualisieren:

    cd weblate-src
    git pull
    # Update Weblate inside your virtualenv
    . ~/weblate-env/bin/pip install -e '.[all]'
    # Install dependencies directly when not using virtualenv
    pip install --upgrade -r requirements.txt
    # Install optional dependencies directly when not using virtualenv
    pip install --upgrade -r requirements-optional.txt
    
  3. Neue Weblate-Versionen haben möglicherweise neue Optionale Abhängigkeiten, bitte prüfen Sie, ob sie die von Ihnen gewünschten Funktionen abdecken.

  4. Upgrade der Konfigurationsdatei, siehe settings_example.py oder Versionsspezifische Anweisungen für die notwendigen Schritte.

  5. Upgrade der Datenbankstruktur:

    weblate migrate --noinput
    
  6. Sammeln aktualisierter statischer Dateien (siehe Laufender Server und Bereitstellung statischer Dateien):

    weblate collectstatic --noinput --clear
    
  7. JavaScript- und CSS-Dateien komprimieren (optional, siehe Client-Assets komprimieren):

    weblate compress
    
  8. Wenn Sie die Version von Git verwenden, sollten Sie auch die Gebietsschemadateien jedes Mal neu generieren, wenn Sie ein Upgrade durchführen. Sie können dies tun, indem Sie folgendes aufrufen:

    weblate compilemessages
    
  9. Überprüfen, ob Ihre Einrichtung in Ordnung ist (siehe auch Produktionseinrichtung):

    weblate check --deploy
    
  10. Celery-Worker neu starten (siehe Hintergrundaufgaben mit Celery).

Versionsspezifische Anweisungen#

Geändert in Version 5.0: Versionsspezifische Anweisungen sind jetzt in den Versionshinweisen enthalten, siehe Weblate 5.0.2.

Upgrade von einer älteren Hauptversion#

Upgrades zwischen Hauptversionen werden nicht unterstützt. Aktualisieren Sie immer auf den neuesten Patch-Level für die erste Hauptversion. Upgrades, die diesen Schritt überspringen, werden nicht unterstützt und führen zu Fehlern.

Wenn Sie von der Version 2.x aktualisieren, sollten Sie immer zuerst auf 3.0.1 aktualisieren und dann innerhalb der 3.x-Serie fortfahren.

Wenn Sie von der Version 3.x aktualisieren, sollten Sie immer zuerst auf 4.0.4 aktualisieren und dann innerhalb der 4.x-Serie fortfahren.

Migration von anderen Datenbanken zu PostgreSQL#

Wenn Sie Weblate auf einer anderen Datenbank als PostgreSQL betreiben, sollten Sie eine Migration zu PostgreSQL in Betracht ziehen, da Weblate damit am besten funktioniert. Die folgenden Schritte werden Sie bei der Migration Ihrer Daten zwischen den Datenbanken anleiten. Bitte denken Sie daran, sowohl den Web- als auch den Celery-Server vor der Migration zu stoppen, da es sonst zu inkonsistenten Daten kommen kann.

Erstellen einer Datenbank in PostgreSQL#

Normalerweise ist es eine gute Idee, Weblate in einer separaten Datenbank und unter einem separaten Benutzerkonto laufen zu lassen:

# If PostgreSQL was not installed before, set the main password
sudo -u postgres psql postgres -c "\password postgres"

# Create a database user called "weblate"
sudo -u postgres createuser -D -P weblate

# Create the database "weblate" owned by "weblate"
sudo -u postgres createdb -E UTF8 -O weblate weblate

Migration mit Django-JSON-Auszug#

Der einfachste Ansatz für die Migration ist die Verwendung von Django-JSON-Auszügen. Dies funktioniert gut für kleinere Installationen. Bei größeren Sites sollten Sie stattdessen pgloader verwenden, siehe Migration zu PostgreSQL mit pgloader.

  1. PostgreSQL als zusätzliche Datenbankverbindung in settings.py einfügen:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.mysql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
        # Additional database options
        "OPTIONS": {
            # In case of using an older MySQL server, which has MyISAM as a default storage
            # 'init_command': 'SET storage_engine=INNODB',
            # Uncomment for MySQL older than 5.7:
            # 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            # If your server supports it, see the Unicode issues above
            "charset": "utf8mb4",
            # Change connection timeout in case you get MySQL gone away error:
            "connect_timeout": 28800,
        },
    },
    "postgresql": {
        # Database engine
        "ENGINE": "django.db.backends.postgresql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
    },
}
  1. Die Migration durchführen und alle in die Tabellen eingefügten Daten löschen:

weblate migrate --database=postgresql
weblate sqlflush --database=postgresql | weblate dbshell --database=postgresql
  1. Auszug der Legacy-Datenbank und Import in PostgreSQL:

weblate dumpdata --all --output weblate.json
weblate loaddata weblate.json --database=postgresql
  1. DATABASES anpassen, um standardmäßig nur die PostgreSQL-Datenbank zu verwenden, die alte Verbindung entfernen.

Weblate sollte nun bereit sein, um von der PostgreSQL-Datenbank aus zu laufen.

Migration zu PostgreSQL mit pgloader#

Der pgloader ist ein allgemeines Migrationswerkzeug für die Migration von Daten nach PostgreSQL. Sie können es verwenden, um Weblate-Datenbanken zu migrieren.

  1. settings.py anpassen, um PostgreSQL als Datenbank zu verwenden.

  2. Das Schema in der PostgreSQL-Datenbank migrieren:

    weblate migrate
    weblate sqlflush | weblate dbshell
    
  3. Den pgloader ausführen, um die Daten zu übertragen. Das folgende Skript kann verwendet werden, um die Datenbank zu migrieren, aber vielleicht möchten Sie mehr über pgloader erfahren, um zu verstehen, was es tut und um es an Ihre Einrichtung anzupassen:

    LOAD DATABASE
         FROM      mysql://weblate:password@localhost/weblate
         INTO postgresql://weblate:password@localhost/weblate
    
    WITH include no drop, truncate, create no tables, create no indexes, no foreign keys, disable triggers, reset sequences, data only
    
    ALTER SCHEMA 'weblate' RENAME TO 'public'
    ;
    

Migration von Pootle#

Da Weblate ursprünglich als Ersatz für Pootle geschrieben wurde, ist es möglich, Benutzerkonten aus Pootle zu migrieren. Sie können die Benutzer aus Pootle auslagern und sie mit importusers importieren.