Rozšíření:Scribunto

From mediawiki.org
This page is a translated version of the page Extension:Scribunto and the translation is 100% complete.
Toto rozšíření je součástí MediaWiki verze 1.34 a vyšších. To znamená, že jej nemusíte stahovat samostatně. Musíte se nicméně stále řídit pokyny k jeho použití.
Toto rozšíření běží nad spustitelným souborem. Aby toto rozšíření fungovalo, musíte mít oprávnění ke spouštění spustitelných souborů na vašem hostiteli.
Základní informace k tomuto rozšíření MediaWiki
Scribunto
Stav rozšíření: stabilní
Zavádění Rozšíření syntaktického analyzátoru
Popis Poskytuje rámec pro vkládání skriptovacích jazyků do stránek MediaWiki
Napsal(i)
  • Victor Vasiliev
  • Tim Starling
a další
Nejnovější verze Průběžně aktualizováno
Zásady kompatibility Vydání snímků následuje MediaWiki. Hlavní vývojová větev není zpětně kompatibilní.
MediaWiki >= 1.42
PHP 5.5+
Licence GPL-2.0-or-later AND MIT
Zdrojový kód
Module (ns:828), Talk_Module (ns:829)
  • $wgScribuntoDefaultEngine
  • $wgScribuntoSlowFunctionThreshold
  • $wgScribuntoGatherFunctionStats
  • $wgScribuntoUseGeSHi
  • $wgScribuntoUseCodeEditor
  • $wgScribuntoEngineConf
Čtvrtletní stahování 544 (Ranked 8th)
Používání veřejných wikin 8,789 (Ranked 30th)
Přeložte rozšíření Scribunto, používá-li lokalizaci z translatewiki.net
Vagrant role scribunto
Problémy Otevřené úkoly · Nahlásit chybu

Rozšíření Scribunto (Latin: "budou psát/nechají je psát (v budoucnu)") umožňuje vkládání skriptovací jazyky na MediaWiki.

V současnosti je jediným podporovaným skriptovacím jazykem Lua. Skripty Scribunto Lua se nacházejí ve jmenném prostoru zvaném Modul. Moduly se spouštějí na normálních wiki stránkách pomocí funkce analyzátoru #invoke a každý modul má kolekci funkcí, které lze volat pomocí syntaxe wikitextu, jako například:

{{#invoke: Module_name | function_name | arg1 | arg2 | arg3 ... }}

Licence

Toto rozšíření obsahuje kód licencovaný GNU General Public License v2.0 nebo novější (GPL-2.0+) a také kód licencovaný MIT License (MIT).

Požadavky

Kompatibilita PCRE verze

Doporučuje se PCRE 8.33+. PCRE 8.33 byla vydána v květnu 2013. Verzi PCRE používanou PHP můžete vidět na phpinfo() webové stránce nebo z příkazového řádku pomocí následujícího příkazu:

php -r 'echo "pcre: " . ( extension_loaded( "pcre" ) ? PCRE_VERSION : "no" ) . "\n";'

CentOS 6 a RHEL 6 uvízly na PCRE 7 a je třeba je aktualizovat.

Aktualizace na 8.33 na serveru se starší verzí může být poměrně komplikovaná. Podrobnosti viz Updating to PCRE 8.33 or Higher .

PHP pcntl (LTS)

Verze MediaWiki:
1.25 – 1.28

Verze Scribunto pro MediaWiki 1.25 až 1.28 vyžadovaly PHP rozšíření pcntl, které je dostupné pouze na platformách Unix/Linux, pokud chcete používat "LuaStandalone" (tj. běžící v samostatném podřízeném procesu). Tento požadavek byl odstraněn v Scribunto pro MediaWiki 1.29.

Zda je podpora pcntl povolena, můžete zkontrolovat zobrazením webové stránky phpinfo() nebo z příkazového řádku pomocí následujícího příkazu:

php -r 'echo "pcntl: " . ( extension_loaded( "pcntl" ) ? "yes" : "no" ) . "\n";'

Rozšíření PHP mbstring

PHP potřebuje mít povolené rozšíření mbstring.

Zda je podpora mbstring povolena, můžete zkontrolovat zobrazením webové stránky phpinfo() nebo z příkazového řádku pomocí následujícího příkazu:

php -r 'echo "mbstring: " . ( extension_loaded( "mbstring" ) ? "yes" : "no" ) . "\n";'

Binární Lua

Balené binární soubory

Scribunto je dodáváno s binárními distribucemi Lua pro Linux (x86 a x86-64), Mac OS X Lion a Windows (32- a 64-bit).

Scribunto by vám mělo fungovat hned po vybalení, pokud:

  1. Váš webový server běží na jedné z výše uvedených platforem.
  2. Funkce proc_open PHP není omezena.[1]
  3. proc_terminate and shell_exec are not disabled in PHP.
  4. Váš webový server je nakonfigurován tak, aby umožňoval spouštění binárních souborů ve stromu MediaWiki.
Poznámka Poznámka: Možná bude nutné nastavit oprávnění ke spouštění; například v Linuxu použijte:
chmod 755 /path/to/extensions/Scribunto/includes/Engines/LuaStandalone/binaries/lua5_1_5_linux_64_generic/lua
Pokud na svém serveru používáte SELinux v režimu "Enforcing", možná budete muset nastavit správný kontext pro binární soubory. Příklad pro RHEL/CentOS 7:
chcon -t httpd_sys_script_exec_t /path/to/extensions/Scribunto/includes/Engines/LuaStandalone/binaries/lua5_1_5_linux_64_generic/lua

P.S. Zkontrolujte svou verzi rozšíření a zjistěte, zda je název složky engine velkými nebo malými písmeny.[2]

Další binární soubory

Další binární distribuce Lua, které mohou být potřeba pro váš webový server, pokud jeho operační systém není ve výše uvedeném seznamu, lze získat od http://luabinaries.sourceforge.net/ nebo z vaší distribuce Linuxu.

Podporovány jsou pouze binární soubory pro Lua 5.1.x.

Jakmile na svůj webový server nainstalujete příslušný binární soubor, nakonfigurujte umístění souboru pomocí:

# Kde Lua je název binárního souboru
# např. SourceForge LuaBinaries 5.1.5 - Release 2 pojmenuje binární soubor lua5.1
$wgScribuntoEngineConf['luastandalone']['luaPath'] = '/path/to/binaries/lua5.1';

Všimněte si, že byste neměli přidávat výše uvedený řádek, pokud jste nepotvrdili, že vestavěné binární soubory Scribunto pro vás nefungují.

LuaJIT, ačkoliv je teoreticky kompatibilní, není podporován.

Podpora byla odstraněna kvůli Spectre (bezpečnostní zranitelnost) a obavám o bitrot (phab:T184156).

Instalace

  • Stáhněte soubor/y a vložte je do adresáře pojmenovaného Scribunto ve vaší složce extensions/.
    Vývojáři a přispěvatelé kódu by si místo toho měli nainstalovat rozšíření from Git pomocí:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
  • Na konec vašeho souboru LocalSettings.php přidejte následující kód:
    wfLoadExtension( 'Scribunto' );
    $wgScribuntoDefaultEngine = 'luastandalone';
    
  • Nastavte oprávnění ke spuštění pro binární soubory Lua dodávané s tímto rozšířením:
chmod a+x /path/to/extensions/Scribunto/includes/Engines/LuaStandalone/binaries/yourOS/lua

[2]

  • Pokud je vynucený SELinux, nastavte typ na httpd_sys_script_exec_t:
chcon -t httpd_sys_script_exec_t /path/to/extensions/Scribunto/includes/Engines/LuaStandalone/binaries/yourOS/lua

[2]

  • Yes Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.


Instalace Vagrant:

  • Pokud používáte Vagrant , instalujte s těmito parametry vagrant roles enable scribunto --provision


Volitelná instalace

Integrace rozšíření

Pro příjemnější uživatelské rozhraní se zvýrazněním syntaxe a editorem kódu s automatickým odsazením nainstalujte následující rozšíření:

Verze MediaWiki:
1.30

Poté do svého LocalSettings.php po všech registracích rozšíření přidejte:

$wgScribuntoUseGeSHi = true;
$wgScribuntoUseCodeEditor = true;

LuaSandbox

Vyvinuli jsme rozšíření PHP napsané v C s názvem LuaSandbox. Lze jej použít jako alternativu k samostatnému binárnímu systému a poskytne lepší výkon. Podrobnosti a pokyny k instalaci viz LuaSandbox .

Pokud jste původně nainstalovali rozšíření pro použití samostatného binárního souboru Lua, nezapomeňte aktualizovat LocalSettings.php s následujícím konfiguračním nastavením:

$wgScribuntoDefaultEngine = 'luasandbox';

Konfigurace

K dispozici jsou následující konfigurační proměnné:

$wgScribuntoDefaultEngine
Vyberte zdroj. Platné hodnoty jsou klíče v $wgScribuntoEngineConf, které jsou ve výchozím nastavení 'luasandbox' nebo 'luastandalone'.
$wgScribuntoUseGeSHi
Když je nainstalováno Rozšíření:SyntaxHighlight , nastavte tuto hodnotu na hodnotu true, abyste jej použili při zobrazování stránek modulu. (MediaWiki 1.30 nebo starší.)
$wgScribuntoUseCodeEditor
Když je nainstalováno Rozšíření:CodeEditor , nastavte tuto proměnnou na true, aby se používala při úpravách stránek modulu. (MediaWiki 1.30 nebo starší.)
$wgScribuntoEngineConf
Asociativní pole pro konfiguraci zdroje. Klíče jsou platné hodnoty pro $wgScribuntoDefaultEngine a hodnoty jsou asociativní pole konfiguračních dat. Každé konfigurační pole musí obsahovat klíč 'class' pojmenující podtřídu ScribuntoEngineBase, která se má použít.

LuaStandalone

Následující klíče se používají v $wgScribuntoEngineConf na Scribunto_LuaStandaloneEngine. Obecně byste je nastavili jako něco podobného

$wgScribuntoEngineConf['luastandalone']['key'] = 'value';
luaPath
Zadejte cestu k interpretu Lua.
errorFile
Zadejte cestu k souboru, do kterého může uživatel webového serveru zapisovat, kam bude protokolován výstup chyb a ladění ze samostatného interpretu.
Chybový výstup vytvořený samostatným interpretem není standardně protokolován. Nakonfigurujte protokolování pomocí:
$wgScribuntoEngineConf['luastandalone']['errorFile'] = '/path/to/file.log';
memoryLimit
Zadejte limit paměti v bajtech pro samostatný interpret v systému Linux (vynucený pomocí ulimit).
cpuLimit
Zadejte časový limit CPU v sekundách pro samostatný interpret v systému Linux (vynucený pomocí ulimit).
allowEnvFuncs
Nastavením true umožníte použití setfenv a getfenv v modulech.

LuaSandbox

Následující klíče se používají v $wgScribuntoEngineConf na Scribunto_LuaSandboxEngine. Obecně byste je nastavili jako něco podobného

$wgScribuntoEngineConf['luasandbox']['klíč'] = 'hodnota';
memoryLimit
Zadejte limit paměti v bajtech.
cpuLimit
Zadejte časový limit CPU v sekundách.
profilerPeriod
Určete dobu mezi průzkumy v sekcích pro Lua profiler.
allowEnvFuncs
Nastavením true umožníte použití setfenv a getfenv v modulech.

Použití

Skripty se ukládají do nového jmenného prostoru nazvaného Module. Každý modul má sbírku funkcí, které lze volat pomocí syntaxe wikitextu, jako například:

{{#invoke: Module_name | function_name | arg1 | arg2 | arg3 ... }}

Lua

Učení Lua

Lua je jednoduchý programovací jazyk určený pro začátečníky. Pro rychlokurz Lua vyzkoušejte Naučte se Lua za 15 minut.

Nejlepší komplexní úvod do Lua je kniha Programování v Lua. První vydání (pro Lua 5.0) je k dispozici online a je většinou relevantní pro Lua 5.1, verzi používanou Scribunto:

Užitečná je také referenční příručka:

Prostředí Lua

V Lua se množina všech globálních proměnných a funkcí nazývá prostředí.

Každé volání na úrovni {{#invoke:}} probíhá v samostatném prostředí. Proměnné definované v jednom {{#invoke:}} nebudou dostupné v jiném. Toto omezení bylo nezbytné pro zachování flexibility v implementaci analyzátoru wikitextu.

Prostředí, ve kterém se skripty spouštějí, není úplně stejné jako ve standardním Lua. Tyto rozdíly jsou uvedeny v Rozšíření:Scribunto/Lua reference manual.

Ladicí konzole

Příklad použití konzoly ladění
Podívejte se také na: Extension:Scribunto/Debug console

Při editaci Lua modulu lze pod editačním formulářem nalézt tzv. "ladicí konzoli". V této konzoli pro ladění lze kód Lua spustit, aniž byste museli ukládat nebo dokonce vytvářet příslušný modul Lua.

Řešení problémů

Odstraňování problémů pomocí odkazu "Script error" (chyba skriptu), na který lze kliknout.

Upozorňujeme, že na červené zprávy Chyba skriptu lze kliknout a poskytnou podrobnější informace.

Chyba Lua: Interní chyba: Interpret byl ukončen s výsledkem 1.

Při použití zdroje LuaStandalone (toto je výchozí nastavení) mohou být generovány chyby ve tvaru "Chyba Lua: Interní chyba: Interpret byl ukončen s výsledkem 1.", pokud samostatný interpret Lua nelze spustit nebo narazí na různé runtime chyby. Chcete-li získat další informace, přiřaďte cestu k souboru $wgScribuntoEngineConf['luastandalone']['errorFile']. Chybový výstup interpretu bude zaprotokolován do zadaného souboru, což by mělo být užitečnější při sledování problému. Informace v protokolu ladění obsahují informace o ladění, proto je jich tolik. Měli byste být schopni ignorovat jakýkoli řádek začínající "TX" nebo "RX".

Pokud nastavujete Scribunto a používáte IIS/Windows, zdá se, že je to vyřešeno zakomentováním a konkrétní řádek.

Chyba Lua: Interní chyba: Interpret byl ukončen s výsledkem 2.

Při použití zdroje LuaStandalone (toto je výchozí nastavení) stav 2 naznačuje chyby při alokaci paměti, pravděpodobně způsobené nastavením, které alokuje nedostatečný paměťový prostor pro PHP nebo Lua nebo obojí. Přiřazení cesty k souboru $wgScribuntoEngineConf['luastandalone']['errorFile'] a prozkoumání tohoto výstupu může být cenné při diagnostice chyb při alokaci paměti.

Zvyšte alokaci PHP ve vaší konfiguraci PHP. Přidejte řádek memory_limit = 200M. Tato alokace 200 MB je často dostatečná (od MediaWiki 1.24), ale může být podle potřeby zvýšena. Nastavte alokaci paměti Scribunto v LocalSettings.php jako řádek:

$wgScribuntoEngineConf['luastandalone']['memoryLimit'] = 209715200; # bajtů

Nakonec, v závislosti na konfiguraci serveru, může některým instalacím pomoci přidání dalšího řádku LocalSettings.php

$wgMaxShellMemory = 204800; # v kB

Všimněte si, že všechny 3 limity paměti jsou uvedeny v různých jednotkách.

Chyba Lua: Vnitřní chyba: 2. na architektuře ARM

Pokud používáte procesor s architekturou ARM jako na RaspberryPi, budete čelit chybě Chyba Lua: Interní chyba: Překladač skončil se stavem 2. kvůli nesprávně dodanému binárnímu formátu překladače Lua.

Zkontrolujte svůj překladač Lua v:

/path/to/webdir/Scribunto/includes/Engines/LuaStandalone/binaries/lua5_1_5_linux_32_generic

Zkontrolujte překladač pomocí:

file lua 

Výsledek by měl vypadat takto:

lua: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0

Nainstalovaný výchozí interpret Lua zobrazuje:

lua: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.9,

podívejte se na část "Intel 80386", která rozhodně není správná.

Zkontrolujte v /usr/bin, jakou verzi Lua máte nainstalovanou ve vašem systému. Pokud máte nainstalovaný lua5.1, můžete buď zkopírovat interpret do svého adresáře lua5_1_5_linux_32_generic, nebo nastavit ve svém LocalSettings.php:

$wgScribuntoEngineConf['luastandalone']['luaPath'] = '/usr/bin/lua5.1';

V současné době nenastavujte wgScribuntoEngineConf až /usr/bin/lua5.3, povede to k "interní chybě 1".

Chyba Lua: Interní chyba: Interpret byl ukončen s výsledkem 24.

Při použití zdroje LuaStandalone (toto je výchozí nastavení) stav 24 naznačuje chyby časového limitu CPU, ačkoli ty by měly místo toho generovat zprávu "The time allocated for running scripts has expired" (čas přidělený pro spouštění skriptů vypršel). Bylo by užitečné zadat úkol v Phabricator a podílet se na určování, proč signál XCPU není zachycen.

Chyba Lua: Interní chyba: Interpret byl ukončen s výsledkem 126.

Při použití zdroje LuaStandalone (toto je výchozí nastavení) mohou být generovány chyby ve tvaru "Chyba Lua: Interní chyba: Interpret byl ukončen s výsledkem 126.", pokud nelze spustit samostatný interpret Lua. To obvykle vzniká z jedné ze dvou příčin:

  • Oprávnění spustitelného souboru Lua nezahrnují Execute (spustit). Nastavte oprávnění, jak je popsáno v #Instalaci.
  • Server neumožňuje spouštění souborů z místa, kde je spustitelný soubor nainstalován, např. souborový systém je připojen s příznakem 'noexec'. K tomu často dochází u sdílených hostovaných serverů. Nápravy zahrnují úpravu $wgScribuntoEngineConf['luastandalone']['luaPath'] tak, aby ukazoval na binární soubor Lua 5.1 nainstalovaný ve spustitelném umístění, nebo úpravu či přesvědčování sdíleného hostitele, aby upravil nastavení bránící spuštění.

Chybový stav jako: Závažná výjimka typu MWException

Další podrobnosti o výjimce naleznete v protokolech MediaWiki, PHP nebo webového serveru nebo dočasně nastavte $wgShowExceptionDetails na true.

verze 'GLIBC_2.11' nenalezena

Pokud vám výše uvedené zobrazí chyby jako "version 'GLIBC_2.11' not found" (verze 'GLIBC_2.11' nenalezena), znamená to, že verze standardní knihovny C ve vašem systému je příliš stará pro binární soubory dodávané se Scribuntem. Měli byste aktualizovat svou knihovnu C nebo použít verzi Lua 5.1 zkompilovanou pro knihovnu C, kterou máte nainstalovanou. Chcete-li aktualizovat svou knihovnu C, nejlepší možností je obvykle postupovat podle pokynů vaší distribuce pro aktualizaci balíčků (nebo pro přechod na nové vydání distribuce, pokud je to možné).

Pokud zkopírujete binárky lua z masteru Scribunto (nebo z gerrit:77905), mělo by to stačit, pokud nemůžete nebo nechcete aktualizovat svou knihovnu C. Distribuované binární soubory byly nedávno překompilovány proti starší verzi glibc, takže minimum je nyní 2.3 namísto 2.11.

Chyby Lua v souborech Scribunto

Chyby zde zahrnují:

  • pokus o indexování pole 'text' (nulová hodnota)
  • Chyba Lua v mw.html.lua na řádku 253: Zadaná neplatná třída:

Pokud se vám při pokusu o použití modulů importovaných z WMF wiki zobrazují chyby, jako jsou tyto, je pravděpodobně vaše verze Scribunto zastaralá.

Aktualizujte, pokud je to možné. Pro pokročilé uživatele se můžete také pokusit identifikovat potřebné novější vydání a vybrat je do místní instalace.

preg_replace_callback(): Kompilace se nezdařila: Neznámý název vlastnosti za \P nebo \p na offsetu 7

preg_replace_callback(): Kompilace se nezdařila: Neznámý název vlastnosti po \P nebo \p na offsetu 7

  • to obvykle označuje nekompatibilní verzi PCRE. Budete muset aktualizovat na >= 8.10
  • @todo: odkaz na pokyny k upgradu

Chyba Lua

Pokud zkopírujete šablony z Wikipedie a poté se zobrazí velká červená zpráva "Lua error: x" tam, kde by mělo být vyvolání Scribunto (např. šablona, která používá {{#invoke:}}), pravděpodobně to znamená, že jste neimportovali vše, co jste potřebovali. Ujistěte se, že jste při exportu zaškrtli políčko "Include templates" (zahrnout šablony) na w:Special:Export.

Při importu stránek z jiné wiki je také možné, že šablony nebo moduly v importovaných datech přepíší existující šablony nebo moduly se stejným názvem, což může poškodit stávající stránky, šablony a moduly, které závisí na přepsaných verzích.

Prázdná obrazovka

Ujistěte se, že je vaše verze rozšíření použitelná pro vaši verzi MediaWiki.

Návrhové dokumenty

Ostatní stránky

Související odkazy

Obecné informace
  • Lua Wikibase client - funkce pro rozšíření Scribunto.
  • Commons:Lua – mohou existovat specifické poznámky k používání modulů Lua na Wikimedia Commons, včetně nainstalovaných dalších rozšíření Lua (např. pro místní podporu internacionalizace a pro analýzu nebo přehrávání médií). Některé moduly pro všeobecné použití mohou být znovu použity v jiných wiki v různých jazycích (kromě specifických ladění pro zásady, jmenné prostory nebo stránky projektu/údržby s vyhrazenými názvy). Pokud je to možné, moduly, které by mohly být široce znovu použity na wikinách, by měly být testovány a internacionalizovány na Wikimedia Commons.
  • w:Help:Lua – mohou existovat konkrétní poznámky k používání modulů Lua na Wikipedii, včetně nainstalovaných dalších rozšíření Lua (včetně integrace obsahu Wikidata a Wikimedia Commons, generování složitých informačních polí a navigačních polí nebo pro usnadnění obecné správy /údržba obsahu wiki podle platných zásad). Některé další lokalizované edice Wikipedie (nebo jiné projekty, jako je Wikislovník, Wikisource nebo Wikinews) mohou mít také své vlastní potřeby a moduly Lua.
  • d:Help:Lua – mohou existovat konkrétní poznámky k používání modulů Lua na Wikidatech, včetně nainstalovaných dalších rozšíření Lua (např. pro místní podporu internacionalizace a pro databázové dotazy)
Rozšíření

Externí odkazy

Poznámky pod čarou

  1. tj. Scribunto nebude fungovat, pokud je proc_open uveden v poli disable_functions v souboru "php.ini" vašeho serveru. Pokud ano, může se zobrazit chybová zpráva jako proc_open(): open_basedir restriction in effect. File(/dev/null) is not within the allowed path(s): Pokud používáte Plesk a byla vám udělena dostatečná oprávnění, možná budete moci nastavit open_basedir v nastavení PHP pro vaši doménu nebo subdoménu. Zkuste změnit {WEBSPACEROOT}{/}{:}{TMP}{/} na {WEBSPACEROOT}{/}{:}{TMP}{/}{:}/dev/null{:}/bin/bash.
  2. 2.0 2.1 2.2 Název složky engine se v roce 2022 změní z malých písmen na velká.