Extensión:Scribunto
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) |
|
Última versión | Actualizaciones continuas |
Política de compatibilidad | Lanzamientos de screenshots junto con MediaWiki. Master no es compatible con versiones anteriores. |
MediaWiki | >= 1.43 |
PHP | 5.5+ |
Licencia | GPL-2.0-or-later AND MIT |
Descarga | |
Module (ns:828), Talk_Module (ns:829) |
|
|
|
Descargas trimestrales | 429 (Ranked 7th) |
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";'
- Scribunto no funcionará con versiones de PCRE inferiores a 8.10.
- PCRE 8.32 tiene un bug que hará que rechace ciertos puntos de código que no son caracteres, lo que provocará errores en el módulo mw.html.
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:
- Your web server is run on one of the above platforms.
- PHP's
proc_open
function is not restricted.[1] proc_terminate
andshell_exec
are not disabled in PHP.- Your web server is configured to allow the execution of binary files in the MediaWiki tree.
- Nota: Execute permissions may need to be set; for example, in Linux use:
- 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:
chmod 755 /path/to/extensions/Scribunto/includes/Engines/LuaStandalone/binaries/lua5_1_5_linux_64_generic/lua
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 carpetaextensions/
.
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
- 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
- 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;
These settings are not necessary in MediaWiki versions after 1.30, where the code editor and syntax hightlighting should be used in the appropriate places automatically once the extensions are loaded. However, other settings may be desired. See the documentation for each extension.
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 subclaseScribuntoEngineBase
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. Default 52428800 (50MB)
- 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.
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
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
- Extension:Scribunto/Parser interface design
- Extension:Scribunto/Victor's API proposal
- Extension:Scribunto/Documentation specification
- Extension:Scribunto/Tim's draft roadmap
Otras páginas
- Extension:Scribunto/Deployment priorities
- Extension:Scribunto/Brainstorming
- Lua scripting - Wikimedia activity page describing deployment plan to Wikimedia sites.
- Extensión:Scribunto/Manual de referencia de Lua - The reference about the Lua language, as well as its standard libraries and common Scribunto modules supported on Wikimedia sites.
- Extension:Scribunto/Lua 5.2 changes - A list of known changes in Lua 5.2 that may cause code written in 5.1 to function unexpectedly.
- Extension:Scribunto/Example modules
- Extension:Scribunto/Example extension - Code for example extensions extending the Scribunto library.
- Extension:Scribunto/We use Lua
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
- Capiunto - Provides basic infobox functionality for the Scribunto extension.
- Semantic Scribunto - provides native support for the Scribunto extension for usage with SemanticMediaWiki
- VariablesLua - provides a Scribunto Lua interface for the Variables extension
- Cliente Wikibase - provides Wikibase (part of Wikidata project)
External links
Notas
- ↑
i.e. Scribunto will not work if
proc_open
is listed in thedisable_functions
array in your server's "php.ini" file. If it is, you may see an error message likeproc_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 setopen_basedir
in the PHP settings for your domain or subdomain. Try changing{WEBSPACEROOT}{/}{:}{TMP}{/}
to{WEBSPACEROOT}{/}{:}{TMP}{/}{:}/dev/null{:}/bin/bash
. - ↑ 2.0 2.1 2.2 The name of the engines folder changed from lowercase to capitalised in 2022.
Esta extensión está siendo usada en uno o más proyectos de Wikimedia. Esto significa probablemente que la extensión es estable y funciona lo suficientemente bien como para ser usada en sitios con gran cantidad de visitas. Puedes buscar el nombre de esta extensión en los archivos CommonSettings.php e InitialiseSettings.php de Wikimedia para ver dónde se instala. Encontrarás la lista completa de extensiones instaladas en un wiki en particular en la página Special:Version del wiki. |
Esta extensión está incluida en los siguientes anfitriones/granjas wiki y/o paquetes: No se trata de una lista oficial. Algunas granjas/hosts wiki y/o paquetes pueden tener disponible esta extensión aunque no estén listados aquí. Siempre compruébelo con su anfitrión o granja wiki para confirmarlo. |