Extensión:Scribunto

From mediawiki.org
This page is a translated version of the page Extension:Scribunto and the translation is 61% complete.
This extension comes with MediaWiki 1.34 and above. Thus you do not have to download it again. However, you still need to follow the other instructions provided.
Esta extensión se ejecuta sobre un ejecutable. Debe tener permiso para ejecutar ejecutables en su host para que esta extensión funcione.
Manual de extensiones de MediaWiki
Scribunto
Estado de lanzamiento: estable
Implementación Extensión del analizador
Descripción Proporciona un marco para incrustar lenguajes de scripting en páginas de MediaWiki
Autor(es)
  • Victor Vasiliev
  • Tim Starling
y otros
Última versión Actualizaciones continuas
Política de compatibilidad Lanzamientos de screenshots junto con MediaWiki. Master no es compatible con versiones anteriores.
MediaWiki >= 1.42
PHP 5.5+
Licencia GPL-2.0-or-later AND MIT
Descarga
Module (ns:828), Talk_Module (ns:829)
  • $wgScribuntoDefaultEngine
  • $wgScribuntoSlowFunctionThreshold
  • $wgScribuntoGatherFunctionStats
  • $wgScribuntoUseGeSHi
  • $wgScribuntoUseCodeEditor
  • $wgScribuntoEngineConf
Descargas trimestrales 547 (Ranked 8th)
Wikis públicos que lo utilizan 8,789 (Ranked 30th)
Traduce la extensión Scribunto si está disponible en translatewiki.net
Función de vagabundo scribunto
Asuntos Tareas abiertas · Reportar un bug

La extensión Scribunto (latín: " escribirán/dejales escribir (en futuro)") permite el embebimiento de lenguas de escriptaje (scripting) en MediaWiki.

Actualmente la única lengua de escriptaje soportada es Lua. Los scripts de Scribunto Lua van en un espacio de nombres llamado Módulo. Modules are run on normal wiki pages using the #invoke parser function and each module has a collection of functions, which can be called using wikitext syntax such as:

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

Licencia

Esta extensión contiene el código de licencia GNU General Public License v2.0 o posterior (GPL-2.0 +), así como el código de licencia MIT License (MIT).

Requisitos

Compatibilidad con la versión PCRE

Se recomienda PCRE 8.33+. PCRE 8.33 was released in May 2013. Puede ver la versión de PCRE utilizada por PHP al ver una página web de phpinfo(), o desde la línea de comando con el siguiente comando:

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

CentOS 6 y RHEL 6 están bloqueados en PCRE 7 y deben actualizarse.

Actualizar a 8.33 en un servidor con una versión anterior puede ser relativamente complicado. Consulte Updating to PCRE 8.33 or Higher para obtener más detalles.

PHP pcntl (LTS)

Versiones de MediaWiki:
1.25 – 1.28

Las versiones de Scribunto para MediaWiki 1.25 a 1.28 requieren la extensión pcntl de PHP, que solo está disponible en plataformas Unix/Linux, si desea utilizar "LuaStandalone" (es decir, ejecutar en un proceso secundario separado). Este requisito se eliminó en Scribunto para MediaWiki 1.29.

Puede verificar si el soporte de pcntl está habilitado al ver una página web de phpinfo(), o desde la línea de comando con el siguiente comando:

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

Extensión PHP mbstring

PHP necesita tener habilitada la extensión mbstring.

Puede verificar si el soporte de mbstring está habilitado al ver una página web de phpinfo(), o desde la línea de comando con el siguiente comando:

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

Lua binario

Binarios incluidos

Scribunto viene con distribuciones binarias de Lua para Linux (x86 y x86-64), Mac OS X Lion y Windows (32 y 64 bits).

Scribunto debería funcionar para usted desde el primer momento si:

  1. Your web server is run on one of the above platforms.
  2. PHP's proc_open function is not restricted.[1]
  3. proc_terminate and shell_exec are not disabled in PHP.
  4. Your web server is configured to allow the execution of binary files in the MediaWiki tree.
Nota Nota: 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

P.S. Check your version of the extension to see if the name of the engines folder is capitalised or fully lowercase.[2]

Binarios adicionales

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.

LuaJIT, although theoretically compatible, is not supported.

The support was removed due to Spectre and bitrot concerns (phab:T184156).

Instalación

  • Descarga y extrae los archivos en un directorio denominado «Scribunto» dentro de la carpeta extensions/.
    Developers and code contributors should install the extension from Git instead, using:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
  • Añade el siguiente código en la parte final de tu archivo 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

[2]

  • 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

[2]

  • Yes Hecho – Navega a Special:Version en el wiki para verificar que la extensión se haya instalado correctamente.


Instalación Vagrant:

  • Si se utiliza Vagrant , instala con vagrant roles enable scribunto --provision


Optional installation

Integrating extensions

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

Versión de MediaWiki:
1.30

Then in your LocalSettings.php after all the extension registrations, add:

$wgScribuntoUseGeSHi = true;
$wgScribuntoUseCodeEditor = true;

LuaSandbox

Hemos desarrollado una extensión PHP escrita en C llamada LuaSandbox. Se puede utilizar como una alternativa al binario independiente y proporcionará un rendimiento mejorado. Consulte LuaSandbox para obtener detalles e instrucciones de instalación.

If you initially installed the extension to use the Lua standalone binary, be sure to update LocalSettings.php with the following configuration setting:

$wgScribuntoDefaultEngine = 'luasandbox';

Configuración

Están disponibles las siguientes variables de configuración:

$wgScribuntoDefaultEngine
Seleccione el motor. Los valores válidos son las claves en $wgScribuntoEngineConf, que por defecto son 'luasandbox' o 'luastandalone'.
$wgScribuntoUseGeSHi
Cuando se instala Extensión:SyntaxHighlight , establezca esto en verdadero para usarlo al mostrar las páginas del módulo. (MediaWiki 1.30 o anterior).
$wgScribuntoUseCodeEditor
Cuando se instala Extensión:CodeEditor , establezca esto en true para usarlo al editar las páginas del módulo. (MediaWiki 1.30 o anterior).
$wgScribuntoEngineConf
Una matriz asociativa para la configuración del motor. Las claves son los valores válidos para $wgScribuntoDefaultEngine y los valores son matrices asociativas de datos de configuración. Cada matriz de configuración debe contener una clave 'class' que nombre la subclase ScribuntoEngineBase que se utilizará.

LuaStandalone

Las siguientes claves se utilizan en $wgScribuntoEngineConf por Scribunto_LuaStandaloneEngine. Generalmente, los configuraría como algo como

$wgScribuntoEngineConf['luastandalone']['key'] = 'value';
luaPath
Especifique la ruta a un intérprete de Lua.
errorFile
Especifique la ruta a un archivo, que puede escribir el usuario del servidor web, donde se registrará el error y la salida de depuración del intérprete independiente.
La salida de error producida por el intérprete independiente no se registra de forma predeterminada. Configure el registro con:
$wgScribuntoEngineConf['luastandalone']['errorFile'] = '/path/to/file.log';
memoryLimit
Especifique el límite de memoria en bytes para el intérprete independiente en Linux (se aplica mediante ulimit).
cpuLimit
Especifique el límite de tiempo de la CPU en segundos para el intérprete independiente en Linux (se aplica mediante ulimit).
allowEnvFuncs
Establezca true para permitir el uso de setfenv y getfenv en módulos.

LuaSandbox

Las siguientes claves se utilizan en $wgScribuntoEngineConf por Scribunto_LuaSandboxEngine. Generalmente, los configuraría como algo como

$wgScribuntoEngineConf['luasandbox']['clave'] = 'valor';
memoryLimit
Especificar el límite de memoria en bytes.
cpuLimit
Especifique el límite de tiempo de la CPU en segundos.
profilerPeriod
Especifique el tiempo entre sondeos en las secciones del generador de perfiles de Lua.
allowEnvFuncs
Establezca true para permitir el uso de setfenv y getfenv en módulos.

Uso

Los scripts van en un nuevo espacio de nombres llamado Módulo. Cada módulo tiene una colección de funciones, que se pueden llamar usando sintaxis de wikitexto como:

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

Lua

Aprendiendo Lua

Lua es un lenguaje de programación simple destinado a ser accesible para principiantes. Para un curso intensivo rápido sobre Lua, prueba Learn Lua in 15 Minutes.

La mejor introducción completa a Lua es el libro Programación en Lua. La primera edición (para Lua 5.0) está disponible en línea y es principalmente relevante para Lua 5.1, la versión utilizada por Scribunto:

  • Programación en Lua (desplácese hacia abajo más allá de los anuncios de libros para encontrar el texto)

El manual de referencia también es útil:

Entorno Lua

En Lua, el conjunto de todas las variables y funciones globales se denomina entorno.

Cada llamada de {{#invoke:}} se ejecuta en un entorno separado. Las variables definidas en un {{#invoke:}} no estarán disponibles en otro. Esta restricción era necesaria para mantener la flexibilidad en la implementación del analizador de wikitexto.

El entorno en el que se ejecutan los scripts no es exactamente el mismo que en Lua estándar. Estas diferencias se indican en Extension:Scribunto/Lua reference manual.

Consola de depuración

Ejemplo de uso de la consola de depuración
Véase también: Extension:Scribunto/Debug console

Al editar un módulo Lua, debajo del formulario de edición, se puede encontrar una llamada "consola de depuración". En esta consola de depuración se puede ejecutar el código Lua sin tener que guardar o incluso crear el módulo Lua en cuestión.

Solución de problemas

Solución de problemas mediante el enlace "Script error" en el que se puede hacer clic.

Tenga en cuenta que se puede hacer clic en los mensajes rojos de Error en la secuencia de órdenes y proporcionarán información más detallada.

Error de Lua: Error interno: El intérprete ha finalizado con el estado 1.

Cuando se utiliza el motor LuaStandalone (este es el predeterminado), se pueden generar errores como "Error de Lua: Error interno: El intérprete ha finalizado con el estado 1." si el intérprete Lua independiente no se puede ejecutar o se encuentra con varios errores de tiempo de ejecución. Para obtener más información, asigne una ruta de archivo a $wgScribuntoEngineConf['luastandalone']['errorFile']. La salida de error del intérprete se registrará en el archivo especificado, lo que debería resultar más útil para rastrear el problema. La información del registro de depuración incluye información de depuración, por lo que hay tanta información. Debería poder ignorar cualquier línea que comience con "TX" o "RX".

If you're setting up Scribunto and are using IIS/Windows, this appears to be solved by commenting out a particular line.

Error de Lua: Error interno: El intérprete ha finalizado con el estado 2.

Cuando se usa el motor LuaStandalone (este es el predeterminado), el estado 2 sugiere errores de asignación de memoria, probablemente causados por configuraciones que asignan espacio de memoria inadecuado para PHP o Lua, o ambos. Assigning a file path to $wgScribuntoEngineConf['luastandalone']['errorFile'] and examining that output can be valuable in diagnosing memory allocation errors.

Aumente la asignación de PHP en su configuración de PHP; agregue la línea memory_limit = 200M. Esta asignación de 200 MB suele ser suficiente (a partir de MediaWiki 1.24) pero se puede aumentar según sea necesario. Configure la asignación de memoria de Scribunto en LocalSettings.php como una línea:

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

Finalmente, dependiendo de la configuración del servidor, algunas instalaciones pueden mejorarse agregando otra línea LocalSettings.php

$wgMaxShellMemory = 204800; # en KB

Tenga en cuenta que los 3 límites de memoria se dan en unidades diferentes.

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 Lua error: Internal error: The interpreter exited with status 2. 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 /usr/bin what version of Lua is installed on your system. If you have lua5.1 installed, you can either copy the interpreter to your lua5_1_5_linux_32_generic directory or set in your LocalSettings.php:

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

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

Error de Lua: Error interno: El intérprete ha finalizado con el estado 24.

Cuando se usa el motor LuaStandalone (este es el predeterminado), el estado 24 sugiere errores de límite de tiempo de la CPU, aunque en su lugar deberían generar un mensaje "El tiempo asignado para ejecutar scripts ha expirado". Sería útil archivar una tarea en Phabricator y participar en la determinación de por qué no se detecta la señal XCPU.

Error de Lua: Error interno: El intérprete ha finalizado con el estado 126.

When using the LuaStandalone engine (this is the default), errors along the lines of "Error de Lua: Error interno: El intérprete ha finalizado con el estado 126." may be generated if the standalone Lua interpreter cannot be executed. Por lo general, esto se debe a una de dos causas:

  • Los permisos del archivo ejecutable lua no incluyen Ejecutar. Configure los permisos como se describe en #Instalación.
  • El servidor no permite la ejecución de archivos desde el lugar donde está instalado el ejecutable, p. Ej. el sistema de archivos se monta con el flag 'noexec'. Esto ocurre a menudo con servidores alojados compartidos. Los remedios incluyen ajustar $wgScribuntoEngineConf['luastandalone']['luaPath'] para apuntar a un binario Lua 5.1 instalado en una ubicación ejecutable, o ajustar o convencer al host compartido para que ajuste la configuración que impide la ejecución.

Condición de error como: Excepción fatal de tipo MWException

Consulte los registros de MediaWiki, PHP o del servidor web para obtener más detalles sobre la excepción, o establezca temporalmente $wgShowExceptionDetails en true.

versión 'GLIBC_2.11' no encontrada

Si lo anterior le da errores como "versión 'GLIBC_2.11' no encontrada", significa que la versión de la biblioteca C estándar en su sistema es demasiado antigua para los binarios proporcionados con Scribunto. Debe actualizar su biblioteca C o usar una versión de Lua 5.1 compilada para la biblioteca C que tiene instalada. Para actualizar su biblioteca C, su mejor opción suele ser seguir las instrucciones de su distribución para actualizar los paquetes (o para actualizar a una nueva versión de la distribución, si corresponde).

If you copy the lua binaries from Scribunto master (or from gerrit:77905), that should suffice, if you can't or don't want to upgrade your C library. Los binarios distribuidos se recompilaron recientemente con una versión anterior de glibc, por lo que el mínimo ahora es 2.3 en lugar 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

Otras páginas

Véase también

General
  • Lua Wikibase client - functionality for the Scribunto extension.
  • 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 Wikimedia Commons.
  • w:Help:Lua - there may be specific notes for using Lua modules on 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.
  • d: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

External links

Notas

  1. i.e. Scribunto will not work if proc_open is listed in the disable_functions array in your server's "php.ini" file. If it is, you may see an error message like proc_open(): open_basedir restriction in effect. File(/dev/null) is not within the allowed path(s):. If you are using Plesk and have been granted sufficient permissions, you may be able to set open_basedir in the PHP settings for your domain or subdomain. Try changing {WEBSPACEROOT}{/}{:}{TMP}{/} to {WEBSPACEROOT}{/}{:}{TMP}{/}{:}/dev/null{:}/bin/bash.
  2. 2.0 2.1 2.2 The name of the engines folder changed from lowercase to capitalised in 2022.