Extension:Scribunto

This page is a translated version of the page Extension:Scribunto and the translation is 99% complete.
Outdated translations are marked like this.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Türkçe • ‎dansk • ‎français • ‎magyar • ‎português • ‎português do Brasil • ‎русский • ‎中文 • ‎日本語
Cette extension est fournie avec MediaWiki 1.34 et supérieur. Ainsi vous n'avez pas besoin de la télécharger à nouveau. Néanmoins, vous devez encore suivre les autres instructions fournies.
Manuel des extensions MediaWiki
OOjs UI icon advanced.svg
Scribunto
État de la version : stable
Implémentation Extension de l'analyseur
Description Fournit un environnement d'exécution our prendre en charge les langages de script dans les pages MediaWiki
Auteur(s)
  • Victor Vasiliev
  • Tim Starling
et autres
Dernière version Mises à jour constantes
Politique de compatibilité branches de version
PHP 5.5+
Licence GPL-2.0-or-later AND MIT
Téléchargement
Module
  • $wgScribuntoDefaultEngine
  • $wgScribuntoSlowFunctionThreshold
  • $wgScribuntoGatherFunctionStats
  • $wgScribuntoUseGeSHi
  • $wgScribuntoUseCodeEditor
  • $wgScribuntoEngineConf
Traduire l’extension Scribunto sur translatewiki.net
Vérifier la matrice des utilisations et des versions.
Problèmes Tâches ouvertes · Signaler un bogue

L'extension Scribunto (latin : « ils l'écriront/le laisseront écrire (à l'avenir) ») permet l'intégration des langages de script dans MediaWiki.

Actuellement, le seul langage de script pris en charge est Lua.

Licence

Cette extension comporte du code sous licence GNU General Public License v2.0 ou ultérieure (GPL-2.0+) ainsi que du code sous licence MIT (MIT).

Prérequis

Compatibilité des versions PCRE

PCRE 8.33+ est recommandé. Vous pouvez voir la version de PCRE utilisée par PHP en affichant une page web phpinfo(), ou à partir de la ligne de commande avec la commande :

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

CentOS 6 et RHEL 6 sont associés à PCRE 7 et doivent être mis à jour.

Mettre à jour vers la 8.33 peut s'avérer très compliqué avec un serveur ayant une version plus ancienne. Voir Mise à jour vers PCRE 8.33 ou supérieur pour les détails.

PHP pcntl (LTS)

Versions de MediaWiki :
1.25 – 1.28

Les versions de Scribunto pour MediaWiki 1.25 à 1.28 nécessitaient l'extension PHP pcntl, qui n'est disponible que sur les plateformes Unix/Linux, si vous voulez utiliser LuaStandalone (par exemple en exécutant dans un processus fils séparé). Cette contrainte a été supprimée dans Scribunto pour MediaWiki 1.29.

Vous pouvez vérifier si pcntl est pris en charge en affichant une page web phpinfo() ou à partir de la ligne de commande en tapant :

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

PHP mbstring extension

PHP needs to have the mbstring extension enabled.

You can check whether mbstring support is enabled by viewing a phpinfo() web page, or from the command line with the following command:

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

Lua binary

Bundled binaries

Scribunto comes bundled with Lua binary distributions for Linux (x86 and x86-64), Mac OS X Lion, and Windows (32- and 64-bit).

Scribunto should work for you out of the box if:

  1. Your web server is run on one of the above platforms.
  2. PHP's proc_open function is not restricted[1]
  3. Your web server is configured to allow the execution of binary files in the MediaWiki tree.
  Note : Execute permissions may need to be set; for example, in Linux use
chmod 755 /path/to/extensions/Scribunto/includes/engines/LuaStandalone/binaries/lua5_1_5_linux_64_generic/lua
If you are using SELinux in "Enforcing" mode on your server, you might need to set a proper context for the binaries. Example for 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

Additional binaries

Additional Lua binary distributions, which may be needed for your web server if its operating system is not in the list above, can be obtained from http://luabinaries.sourceforge.net/ or from your Linux distribution. Only binary files for Lua 5.1.x are supported. Once you've installed the appropriate binary file on your web server, configure the location of the file with:

# where lua is the name of the binary file
# e.g. sourceforge LuaBinaries 5.1.5 - Release 2 name the binary file lua5.1
$wgScribuntoEngineConf['luastandalone']['luaPath'] = '/path/to/binaries/lua5.1';

Note that you should not add the above line unless you've confirmed that Scribunto's built-in binaries don't work for you.

Installation

  • Si vous utilisez Vagrant , installez avec vagrant roles enable scribunto --provision
Installation manuelle
  • Téléchargez et placez le(s) fichiers (s) dans un répertoire appelé Scribunto dans votre dossier extensions/.
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php :
    wfLoadExtension( 'Scribunto' );
    $wgScribuntoDefaultEngine = 'luastandalone';
    
  • Set execute permissions for the Lua binaries bundled with this extension:
chmod a+x /path/to/extensions/Scribunto/includes/engines/LuaStandalone/binaries/yourOS/lua
  • Set type to httpd_sys_script_exec_t if SELinux is enforced:
chcon -t httpd_sys_script_exec_t /path/to/extensions/Scribunto/includes/engines/LuaStandalone/binaries/yourOS/lua
  •   Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Pour les utilisateurs de MediaWiki 1.29 ou précédents :

Les instructions ci-dessus décrivent la nouvelle procédure pour installer cette extension en utilisant wfLoadExtension(). Si vous avez besoin d'installer cette extension sur les précédentes versions de MediaWiki (1.29 ou antérieur), à la place de wfLoadExtension( 'Scribunto' );, vous devez utiliser :

require_once "$IP/extensions/Scribunto/Scribunto.php";

Optional Installation

Integrating extensions

For a more pleasant user interface, with syntax highlighting and a code editor with autoindent, install the following extensions:

(MediaWiki 1.30 or earlier)Then in your LocalSettings.php after all the extension registrations, add:

$wgScribuntoUseGeSHi = true;
$wgScribuntoUseCodeEditor = true;

LuaSandbox

Nous avons développé une extension PHP écrite en C appelée LuaSandbox. Il peut être utilisé en tant qu'alternative au binaire isolé, en fournira de meilleures performances. Voir LuaSandbox pour les détails et les instructions d'installation.

Si vous avez initialement installé l'extension pour qu'elle utilise le binaire Lua séparé, vérifiez d'avoir mis à jour LocalSettings.php avec $wgScribuntoDefaultEngine = 'luasandbox';.

Configuration

Les variables de configuration suivantes sont disponibles :

$wgScribuntoDefaultEngine
Choisir le moteur Les valeurs valides sont les clés de $wgScribuntoEngineConf, qui par défaut sont 'luasandbox' ou 'luastandalone'.
$wgScribuntoUseGeSHi
Lorsque Extension:SyntaxHighlight est installé, mettez ceci à true pour l'utiliser lors de l'affichage des pages du module.
$wgScribuntoUseCodeEditor
Lorsque Extension:CodeEditor est installé, mettez ceci à true pour l'utiliser lors de la modification des pages du module.
$wgScribuntoEngineConf
Tableau associatif pour la configuration du moteur. Les clés sont les valeurs valides pour $wgScribuntoDefaultEngine, et les valeurs sont les tableaux associatifs des paramètres de configuration. Chaque tableau de configuration doit contenir une clé 'class' qui nomme les sous-classes ScribuntoEngineBase à utiliser.

LuaStandalone

Les clés suivantes sont utilisées dans $wgScribuntoEngineConf pour Scribunto_LuaStandaloneEngine. En général, vous les initialiserez d'une manière similaire à :

$wgScribuntoEngineConf['luastandalone']['key'] = 'value';
luaPath
Spécifier le chemin vers un interpréteur Lua.
errorFile
Indiquez le chemin vers un fichier, accessible en écriture par l'utilisateur du serveur web, où la sortie des erreurs et des informations de debogage seront journalisées.
Les sorties d'erreurs produites par l'interpréteur indépendant ne sont pas journalisées par défaut. Configurez la connexion avec :
$wgScribuntoEngineConf['luastandalone']['errorFile'] = '/path/to/file.log';
memoryLimit
Indiquez la taille limite de la mémoire en octets pour l'interpréteur indépendant sous Linux (forcé en utilisant ulimit).
cpuLimit
Indiquez la valeur maximale du temps d'utilisation du CPU en secondes pour l'interpréteur indépendant sous Linux (forcé en utilisant ulimit)
allowEnvFuncs
Mettre à true pour autoriser l'utilisation de setfenv et getfenv dans les modules.

LuaSandbox

Les clés suivantes sont utilisées dans $wgScribuntoEngineConf pour Scribunto_LuaSandboxEngine. En général, vous les initialiserez d'une manière similaire à :

$wgScribuntoEngineConf['luasandbox']['clé'] = 'valeur';
memoryLimit
Indiquez la limite de la mémoire en octets.
cpuLimit
Indiquez la limite du temps CPU en secondes.
profilerPeriod
Indiquez le temps entre chaque interrogation en secondes pour le profileur Lua.
allowEnvFuncs
Mettez à true pour permettre l'utilisation de setfenv et getfenv dans les modules.

Utilisation

Les scripts se placent dans un nouvel espace de noms appelé Module. Chaque module possède un ensemble de fonctions pouvant être appelées avec la syntaxe wikicode telle que :

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

Lua

Apprendre Lua

Lua est un langage simple de programmation créé dans le but d'être accessible aux débutants. Pour un cours Lua super rapide, essayez Apprendre Lua en 15 minutes.

La meilleure introduction détaillée sur Lua est le livre Programmer en Lua. La première édition (pour Lua 5.0) est disponible en ligne et convient pratiquement pour Lua 5.1 qui est la version utilisée par Scribunto :

Le manuel de référence est également utile :

Environnement Lua

En Lua, nous appelons environnement l'ensemble des variables et des fonctions globales.

Chaque appel de {{#invoke:}} s'exécute dansn environnement séparé. Les variables définies dans un {{#invoke:}} ne seront pas accessibles d'un autre. Cette restriction était nécessaire pour maintenir la flexibilité dans l'implémentation de l'analyseur de wikicode.

L'environnement d'exécution des scripts n'est pas tout à fait le même que l'environnement standard Lua. Ces différences sont décrites dans Extension:Scribunto/Manuel de référence Lua.

Console de débogage

 
Exemple d'utilisation de la console de débogage
Voir aussi : Extension:Scribunto/Debug console

Lorsque vous modifiez un module Lua, une fenêtre de debogage apparaît sous le formulaire d'édition. Dans cette fenêtre de débogage, vous pouvez exécuter du code Lua sans avoir à sauvegarder ou même à créer le module Lua en question.

Dépannage

 
Correction d'erreurs en utilisant le lien cliquable Erreur de script.

Remarquez que les messages rouges Erreur de script sont cliquables et fourniront des informations plus détaillées.

Erreur Lua : erreur interne : l’interpréteur s’est arrêté avec l’état « 1 ».

Si vous utilisez le moteur LuaStandalone (cas par défaut), les erreurs avec les lignes associées de « Erreur Lua : erreur interne : l’interpréteur s’est arrêté avec l’état « 1 ». » peuvent être générées si l'interpréteur indépendant Lua ne peut pas être exécuté ou s'exécute avec de multiples erreurs de code. Pour obtenir davantage d'informations, définissez un chemin de fichier pour $wgScribuntoEngineConf['luastandalone']['errorFile']. La sortie d'erreurs de l'interpréteur sera tracée dans le fichier spécifié, ce qui s'avèrera plus utile lors de la recherche de fautes. L'information dans le journal de debogage comprend les informations de debogage, c'est pourquoi il est si long. Vous devriez pouvoir ignorer les lignes commençant par TX ou RX.

Erreur Lua : erreur interne : l’interpréteur s’est arrêté avec l’état « 2 ».

En utilisant le moteur LuaStandalone (cas par défaut), l'état 2 suggère des erreurs d'allocation mémoire, probablement causées par les paramètres qui réservent l'espace mémoire non approprié pour PHP ou Lua, ou pour les deux. En fournissant un chemin de fichier à $wgScribuntoEngineConf['luastandalone']['errorFile'] et en examinant ainsi la sortie vous pourrez diagnostiquer valablement les erreurs d'allocation mémoire.

Augmentez l'allocation PHP dans votre configuration PHP; ajoutez la ligne memory_limit = 200M . Celle allocation de 200 Mo est habituellement suffisante (depuis MediaWiki 1.24) et peut être augmentée si nécessaire. Définissez l'allocation mémoire de Scribunto dans le fichier LocalSettings.php avec la ligne suivante :

$wgScribuntoEngineConf['luastandalone']['memoryLimit'] = 209715200; # octets

Enfin, en fonction de la configuration du serveur, certaines installations peuvent être facilitées en ajoutant une autre ligne à LocalSettings.php :

$wgMaxShellMemory = 204800; # en ko

Notez que les limites des trois mémoires sont données dans des unités différentes.

Erreur Lua : erreur interne : l’interpréteur s’est arrêté avec l’état « 24 ».

Lorsque vous utilisez le moteur LuaStandalone (cas par défaut), l'état 24 suggère des erreurs de dépassement du temps d'allocation CPU, bien que celles-ci devraient générer à la place, un message « Le temps alloué à l'exécution des scripts est dépassé » . Il serait utile de créer une tâche dans Phabricator et d'y participer pour déterminer pourquoi le signal XCPU n'a pas été récupéré.

Erreur Lua : erreur interne : l’interpréteur s’est arrêté avec l’état « 126 ».

Lorsque vous utilisez le moteur LuaStandalone (cas par défaut), des erreurs avec les lignes associées de « Erreur Lua : erreur interne : l’interpréteur s’est arrêté avec l’état « 126 ». » peuvent apparaître si l'interpréteur Lua indépendant ne peut pas être exécuté. Ceci est dû généralement à l'une des deux causes suivantes :

  • Le droit d'exécuter sur les fichiers Lua n'incluent pas l'exécution (Execute). Attribuez les droits tel que décrit dans la section Installation.
  • Le serveur n'autorise pas l'exécution des fichiers à partir de l'endroit où ils ont été installés parce que le système de fichiers est monté avec l'attribut 'noexec'. Ceci se produit souvent avec des serveurs hôtes partagés. Une solution possible est de modifier $wgScribuntoEngineConf['luastandalone']['luaPath'] pour qu'il pointe vers un binaire Lua 5.1 installé à un endroit exécutable ou en l'adaptant, ou encore en convaincant l'hôte partagé de corriger le paramètre qui empêche l'exécution.

Condition d'erreur telle que : exception fatale de type MWException

Voyez les journaux de MediaWiki, PHP, ou du serveur web pour davantage de détails sur l'exception, ou mettez temporairement $wgShowExceptionDetails à true.

Version 'GLIBC_2.11' non trouvée

Si ce qui précède génère des erreurs telles que « version 'GLIBC_2.11' non trouvée » , cela signifie que la version de la bibliothèque standard C sur votre système, est trop ancienne pour les bianires fournis avec Scribunto. Vous devriez mettre à jour votre bibliothèque C ou utiliser une version de Lua 5.1 compilée pour la bibliothèque C que vous avez installée. Pour mettre à jour votre bibliothèque C, la meilleure façon est habituellement de suivre les instructions de votre distribution relatives à la mise à jour des paquets logiciels (ou pour faire la mise à jour vers une nouvelle version de la distribution, selon le cas).

Si vous copiez les binaires Lua à partir de la branche master de Scribunto (ou de gerrit:77905), cela devrait suffire, si vous ne pouvez pas (ou ne voulez pas) mettre à jour votre bibliothèque C. Les binaires distribués ont été récemment recompilés avec une ancienne version de glibc, donc le minimum maintenant est 2.3 au lieu de 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

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 {{#invoke:}}) 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

Autres pages

Voir aussi

General
  • Lua Wikibase client - functionality for the Scribunto extension.
  • commons:Commons:Lua - there may be specific notes for using Lua modules on Wikimedia Commons, including additional Lua extensions installed (e.g. for local support of internationalization and for parsing or playing medias). Some general purpose modules may be reused in other wikis in various languages (except specific tunings for policies, namespaces or project/maintenance pages with dedicated names). If possible, modules that could be widely reused across wikis should be tested and internationalized on Commons.
  • wikipedia:Help:Lua - there may be specific notes for using Lua modules on (English) Wikipedia, including additional Lua extensions installed (including for integrating Wikidata and Wikimedia Commons contents, generating complex infoboxes and navigation boxes, or to facilitate the general administration/maintenance of the wiki contents under applicable policies). Some other localized Wikipedia editions (or other projects such Wiktionnary, Wikisource or Wikinews) may also have their own needs and Lua modules.
  • wikidata:Help:Lua - there may be specific notes for using Lua modules on Wikidata, including additional Lua extensions installed (e.g. for local support of internationalization and for database queries)
Extensions

Notes

  1. i.e. proc_open is not within the array of disable_functions in your server's "php.ini" file.