Nunca he usado realmente los archivos .app
para mis proyectos. Entiendo que son necesarios para cargar una aplicación a través del módulo application
.¿Se beneficia del archivo ".app" en Erlang?
¿Hay algún otro uso de tales archivos?
Nunca he usado realmente los archivos .app
para mis proyectos. Entiendo que son necesarios para cargar una aplicación a través del módulo application
.¿Se beneficia del archivo ".app" en Erlang?
¿Hay algún otro uso de tales archivos?
La * .app junto con el archivo * .rel se usa para generar scripts de arranque. Un script de arranque se usa para iniciar automáticamente mi aplicación cuando se inicia erlang. Un archivo de recursos de la aplicación describe qué aplicaciones se deben ejecutar antes de que se pueda iniciar mi aplicación. Por ejemplo, si uso mnesia e indico que en el archivo .app para mi aplicación, cuando genero un script de arranque y lo uso para iniciar mi aplicación, comenzará mnesia para mí al iniciar mi propia aplicación.
Si bien puede obtener la instalación/manejo de dependencias automáticas con otros administradores de paquetes, el script de arranque es útil para administrar dependencias en el inicio de su aplicación que es importante en la configuración de una aplicación OTP.
nota: aplicaciones en otp se refiere a un conjunto de procesos en ejecución y/o código. las aplicaciones pueden depender de otras aplicaciones de varias maneras. O requieren que se instale el código o requieren que la aplicación se esté ejecutando.
Se utilizan para crear versiones (con * .rel para generar scripts de arranque). Sin embargo, recomiendo comenzar con el archivo * .app y la devolución de llamada de comportamiento de la aplicación. En cuanto a comenzar con OTP. Es un buen punto dulce en el desarrollo que debe hacer:
-module(foo).
-export([start/0]).
start() ->
[application:start(A) || A <- [sasl, inets, x, y, etc]].
para iniciar todas las aplicaciones que dependen de tener funcionando para su aplicación con un simple
$ erl -s foo
-mnesia dir '"/some/path"'
a erl, se accede a través de la aplicación mnesia como application:get_env(mnesia, dir)
. Si define una aplicación llamada foo
, puede pasar -foo key 'some-Erlang-literal'
a erl. El archivo * .app puede contener valores predeterminados en la sección env
, el archivo * .rel los reemplaza, y la línea de comando anula eso.Algunas características adicionales de aplicaciones Erlang que no conozco bien:
Finalmente, comenzará a querer iniciar su conjunto de aplicaciones de una manera más estructurada, y es entonces cuando todo el lanzamiento/script de inicio se volverá más comprensible. O al revés, pensarás que es excesivo para tus necesidades específicas. Simplemente comience con un simple * .app y un módulo con las devoluciones de llamada de comportamiento de la aplicación. No mirarás atrás.
Gracias por su contribución. Estoy acostumbrado a empaquetar mis aplicaciones para implementación utilizando un repositorio Debian (es decir, se manejan dependencias, instalación/actualización, etc.). En este contexto, ¿qué me consigue OTP/.app? – jldupont
si su archivo .app está configurado, entonces el código anterior es superfluo. Solo aplicación: start (my_app) es todo lo que necesita para comenzar todas sus dependencias y luego su aplicación. Si ha generado un script de arranque, puede hacer que lo anterior suceda automáticamente cuando inicie Erlang. –
Agregando a los beneficios: los archivos .app permiten que la creación de scripts de arranque detecte nombres duplicados de módulos o procesos dentro de las aplicaciones. También permite que la máquina virtual cargue todos los módulos al inicio, para que pueda usar el modo integrado. También puede aplicar las versiones correctas de las aplicaciones, etc ... – Zed
Aunque no he encontrado una situación en la que el orden de los grupos de aplicaciones sea importante, puedo apreciar su utilidad. ¡Gracias! – jldupont