Es ist ein multifunktionales Wiki.js, aber ich wusste nicht, wie ich vorhandene Daten stapelweise importieren soll, deshalb habe ich versucht, die Aktualisierung der Datenbank zu erzwingen. Dies ist keine formale Methode. Versuchen Sie es daher auf eigenes Risiko.
--Vorbereitung
Bitte lesen Sie auch GIGAZINE-Artikel.
Die Arbeit wird mit bash von macOS bestätigt. Bitte haben Sie Docker-Compose und Python 3.8 installiert.
Es gibt verschiedene Startmethoden in "Wiki.js --Docs", aber verwenden Sie Docker-Compose. Erstellen Sie zunächst docker-compose.yml.
bash
mkdir wikijs
cd wikijs
cat << EOF > docker-compose.yaml
version: "3"
services:
db:
image: postgres:11-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
POSTGRES_USER: wikijs
ports:
- "5432:5432"
logging:
driver: "none"
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
wiki:
image: requarks/wiki:2
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: wikijsrocks
DB_NAME: wiki
restart: unless-stopped
ports:
- "80:3000"
volumes:
db-data:
EOF
Wenn Sie den Port 5432 auf der lokalen Seite ändern, ändern Sie "5432: 5432" in "15432: 5432" und ändern Sie auch den nachfolgenden 5432.
Wiki.js beginnt mit docker-compose up -d
. Der Stopp ist "Docker-Compose Down".
Wiki.js ist unter http: // localhost / verfügbar.
Erstellen Sie das ADMINISTRATOR-KONTO entsprechend. Melden Sie sich dann mit dem von Ihnen erstellten Konto an.
Unmittelbar nach dem Anmelden gibt es keine Seiten. Erstellen Sie zunächst die oberste Seite.
Der Pfad der oberen Seite lautet "/ en
) als Sprache verwenden.
Hier werden wir Japanisch (ja
) als Sprache verwenden.
Installieren Sie nach dem Erstellen der englischen Top-Seite zunächst die japanische Sprache, löschen Sie die englische Top-Seite und erstellen Sie die japanische Top-Seite.
Drücken Sie " + HOME PAGE ERSTELLEN
".
Drücken Sie "Markdown", drücken Sie " ✓ OK
"und dann" ✓ CREATE
".
Die oberste Seite (http: // localhost / de / home
) wird geöffnet. Da Sie als Administrator angemeldet sind, öffnen Sie den Verwaltungsbildschirm (http: // localhost / a / dashboard
) mit" ⚙
" oben rechts.
Wählen Sie " Locale
"auf der linken Seite. Wählen Sie "Japanisch" aus "Download-Gebietsschema" und klicken Sie auf "Download" der "Abwärtspfeilmarkierung in der Cloud". Gehen Sie dann zurück nach oben und setzen Sie " Locale Settings
"auf" Japanese "und drücken Sie oben rechts auf" ✓ APPLY
".
Da der aktive Namespace in Japanisch geändert wurde, muss die obere Seite auf Japanisch neu erstellt werden.
Wählen Sie " Seite
"auf der linken Seite. Wählen Sie das Element aus, dessen Pfad "en / home" ist, und löschen Sie es mit " Delete
"von" ACTIONS v
".
Klicken Sie oben rechts auf "Schließen", um zum ersten Bildschirm zurückzukehren. Erstellen Sie daher eine japanische Startseite.
Mit Wiki.js können Sie Artikel in Ihrem Browser erstellen. Hier werden wir jedoch versuchen, Artikel zu erstellen, indem Sie die Datenbank direkt in Python bearbeiten. Erstellen Sie zunächst eine virtuelle Python-Umgebung.
bash
python3.8 -m venv venv
source venv/bin/activate
pip install psycopg2-binary SQLAlchemy
Erstellen Sie eine Klasse aus der Datenbank zur Verwendung mit SQLAlchemy. Führen Sie die folgenden Schritte aus, um "db_class.py" zu erstellen.
bash
cat << EOF | python
import re
from sqlalchemy import MetaData, create_engine
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine("postgresql+psycopg2://wikijs:wikijsrocks@localhost:5432/wiki")
metadata = MetaData()
metadata.reflect(engine)
Base = declarative_base(metadata=metadata)
def _subfunc(m):
s = ".".join(m.group(1).split(".")[-2:])
return rf"ForeignKey('{s}')"
def make_class(cls):
lst = [f"class {str(cls).split('.')[-1][:-2]}(Base):"]
lst.append(f' __tablename__ = "{cls.__tablename__}"\n')
for column in cls.__table__.columns:
s = repr(column)
nam = s.split("'")[1]
s = re.sub(r", table=[^>]+>", "", s)
s = re.sub(r", server_default=[^)]+\)", "", s)
s = re.sub(r"ForeignKey\('([^']+)'\)", _subfunc, s)
lst.append(f" {nam} = {s}")
res = "\n".join(lst) + "\n"
res = res.replace("metadata = Column", "metadata_ = Column")
return res
def make_classes():
lst = [
"""\
# made by make_classes
from typing import Any
from sqlalchemy import Column, ForeignKey, Text
from sqlalchemy.dialects.postgresql import (
BOOLEAN, BYTEA, INTEGER, JSON, TEXT, TIMESTAMP, VARCHAR
)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base() # type: Any
"""
]
dc = {"__table_args__": {"autoload": True}}
for tbl in sorted(metadata.tables):
if tbl in {"brute"}:
continue
typ = type(tbl.title(), (Base,), dict(__tablename__=tbl, **dc))
lst.append(make_class(typ))
with open("db_class.py", "w") as fp:
fp.write("\n".join(lst))
make_classes()
EOF
Erstellen Sie zunächst eine Datei.
bash
cat << EOF > main.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from db_class import *
engine = create_engine("postgresql+psycopg2://wikijs:wikijsrocks@localhost:5432/wiki")
Session = sessionmaker(bind=engine)
session = Session()
pgid = max(i.id for i in session.query(Pages).all()) + 1
ptid = max(i.id for i in session.query(Pagetree).all()) + 1
pg = Pages(
id=pgid,
path=f"test{pgid}",
hash="0123456789001234567890abcdefghijklmnopqr",
title=f"Testseite{pgid}",
isPrivate=False,
isPublished=True,
content="",
contentType="markdown",
createdAt="2020-10-04T09:00:00.000Z",
updatedAt="2020-10-04T09:00:00.000Z",
editorKey="markdown",
localeCode="ja",
description="",
authorId=1,
creatorId=1,
render="<div></div>",
toc=[{"title": "", "anchor": "", "children": []}],
extra={"js": "", "css": ""},
publishStartDate="",
publishEndDate="",
)
pt = Pagetree(
id=ptid,
path=pg.path,
localeCode="ja",
pageId=pgid,
title=pg.title,
depth=1,
isPrivate=False,
isFolder=False,
ancestors=[],
)
session.add(pg)
session.add(pt)
session.commit()
session.close()
EOF
Erstellen Sie oben main.py
.
python main.py
erstellt eine leere Seite namens Test Page ...
.
Der Inhalt wird in "Pages.content" und "Pages.render" beschrieben. Es wird nicht angezeigt, wenn es nur im Inhalt beschrieben wird, aber es wird angezeigt, wenn es bearbeitet und gespeichert wird.
Sie können den Inhalt der Datenbank mit pg_dump -h localhost -p 5432 -U wikijs wiki -f data.sql
sichern.
Sie können psql -h host -p 5432 -U Benutzerdatenbank -f data.sql
verwenden, um Daten an ein leeres PostgreSQL zurückzugeben.
Recommended Posts