Extension:Scribunto/cs

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 Scriunto Lua se nacházejí ve jmenném prostoru zvaném Modul.

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:


 * Scriunto nebude fungovat s verzemi PCRE nižšími než 8.10.
 * PCRE 8.31 obsahuje chyby se vzorem JIT, který zkoumá, že rozbíjí různé vzory při použití s HHVM.
 * PCRE 8.32 obsahuje chybu, která způsobí odmítnutí určitých neznakových kódových bodů, což způsobí chyby v modulu mw.html.

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.

PHP pcntl (LTS)
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:



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:



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:

P.S. Zkontrolujte svou verzi rozšíření a zjistěte, zda je název složky engine velkými nebo malými písmeny.
 * 1) Váš webový server běží na jedné z výše uvedených platforem.
 * 2) Funkce   PHP není omezena.
 * 3) Váš webový server je nakonfigurován tak, aby umožňoval spouštění binárních souborů ve stromu MediaWiki.
 * Možná bude nutné nastavit oprávnění ke spouštění; například v Linuxu použijte:
 * 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:



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í:

Všimněte si, že byste neměli přidávat výše uvedený řádek, pokud jste nepotvrdili, že vestavěné binární soubory Scriunto 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 (T184156).

Instalace


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í:

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

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.

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

Konfigurace
K dispozici jsou následující konfigurační proměnné:
 * $wgScribuntoDefaultEngine
 * Vyberte zdroj. Platné hodnoty jsou klíče v, které jsou ve výchozím nastavení  nebo.


 * $wgScribuntoUseGeSHi
 * Když je nainstalováno, 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, nastavte tuto proměnnou na , 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 a hodnoty jsou asociativní pole konfiguračních dat. Každé konfigurační pole musí obsahovat klíč   pojmenující podtřídu , která se má použít.

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


 * 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í:


 * 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 na. Obecně byste je nastavili jako něco podobného


 * 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:

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:


 * Programování v Lua (přejděte dolů za reklamy na knihy a vyhledejte text)

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  probíhá v samostatném prostředí. Proměnné definované v jednom  nebudou dostupné v jiném. Toto omezení bylo nezbytné pro zachování flexibility v implementaci analyzátoru wikitextu.



Ladicí konzole



 * Podívejte se také na: 

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ů


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

Při použití zdroje LuaStandalone (toto je výchozí nastavení) mohou být generovány chyby ve tvaru "", 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. 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 Scriunto a používáte IIS/Windows, zdá se, že je to vyřešeno zakomentováním a konkrétní řádek.

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  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. 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 Scriunto v  jako řádek: Finally, depending on the server configuration, some installations may be helped by adding another  line

Note that all 3 memory limits are given in different units.

Lua error: Internal error: 2. on ARM architecture
If you're using an ARM architecture processor like on a RaspberryPi you'll face the error  due to wrong delivered binary format of the Lua interpreter.

Check your Lua interpreter in: /path/to/webdir/Scribunto/includes/Engines/LuaStandalone/binaries/lua5_1_5_linux_32_generic

Check the interpreter by using: file lua The result should look like : 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 The installed default Lua interpreter shows: 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, look at the "Intel 80386" part what definitely is not correct.

Check in  what version of Lua is installed on your system. If you have lua5.1 installed, you can either copy the interpreter to your  directory or set in your LocalSettings.php:

At present don't set  to /usr/bin/lua5.3, it'll lead to the "Internal error 1".

When using the LuaStandalone engine (this is the default), status 24 suggests CPU time limit errors, although those should be generating a "The time allocated for running scripts has expired" message instead. It would be useful to file a task in and participate in determining why the XCPU signal isn't being caught.

When using the LuaStandalone engine (this is the default), errors along the lines of "" may be generated if the standalone Lua interpreter cannot be executed. This generally arises from either of two causes:

Set permissions as described under #Installation. This often occurs with shared hosted servers. Remedies include adjusting  to point to a Lua 5.1 binary installed in an executable location, or adjusting or convincing the shared host to adjust the setting preventing execution.
 * The lua executable file's permissions do not include Execute.
 * The server does not allow execution of files from the place where the executable is installed, e.g. the filesystem is mounted with the  flag.

Error condition such as: Fatal exception of type MWException
Check the MediaWiki, PHP, or webserver logs for more details on the exception, or temporarily set to.

version 'GLIBC_2.11' not found
If the above gives you errors such as "version 'GLIBC_2.11' not found", it means the version of the standard C library on your system is too old for the binaries provided with Scribunto. You should upgrade your C library, or use a version of Lua 5.1 compiled for the C library you do have installed. To upgrade your C library, your best option is usually to follow your distribution's instructions for upgrading packages (or for upgrading to a new release of the distribution, if applicable).

If you copy the lua binaries from Scribunto master (or from 77905), that should suffice, if you can't or don't want to upgrade your C library. The distributed binaries were recently recompiled against an older version of glibc, so the minimum is now 2.3 rather than 2.11.

Lua errors in Scribunto files
Errors here include:
 *  attempt to index field 'text' (a nil value) 
 *  Lua error in mw.html.lua at line 253: Invalid class given: 

If you are getting errors such these when attempting to use modules imported from WMF wikis, most likely your version of Scribunto is out of date.

Upgrade if possible; for advanced users, you might also try to identify the needed newer commits and cherry-pick them into your local installation.

preg_replace_callback: Compilation failed: unknown property name after \P or \p at offset 7

 * this usually indicates an incompatible version of PCRE; you'll need to update to >= 8.10
 * @todo: link to instructions on how to upgrade

Lua error
If you copy templates from Wikipedia and then get big red "Lua error: x" messages where the Scribunto invocation (e.g. the template that uses ) should be, that probably means that you didn't import everything you needed. Make sure that you tick the "Include templates" box at w:Special:Export when you export.

When importing pages from another wiki, it is also possible for templates or modules in the imported data to overwrite existing templates or modules with the same title, which may break existing pages, templates, and modules that depend on the overwritten versions.

Blank screen
Make sure your extension version is applicable to your MediaWiki version.

Design documents

 * Linux.conf.au 2014 - Scribunto presentation.webm's presentation at linux.conf.au 2014 discussing the motivations, implementation challenges and results of deploying Scribunto and Lua. ]]

Other pages

 * - Wikimedia activity page describing deployment plan to Wikimedia sites.
 * - The reference about the Lua language, as well as its standard libraries and common Scribunto modules supported on Wikimedia sites.
 * - A list of known changes in Lua 5.2 that may cause code written in 5.1 to function unexpectedly.
 * - Code for example extensions extending the Scribunto library.
 * - A list of known changes in Lua 5.2 that may cause code written in 5.1 to function unexpectedly.
 * - Code for example extensions extending the Scribunto library.
 * - Code for example extensions extending the Scribunto library.