2009-11-28 10 views

Respuesta

11

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.

+0

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

8

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 
  • Si el proyecto se va a utilizar como un servicio o marco para otros proyectos, otro beneficio es que esas aplicaciones de Erlang pueden a su vez depender de, o incluir, su aplicación. Una aplicación Erlang es la unidad en la que se proporcionan servicios e incluso bibliotecas (stdlib es una biblioteca, no hay "partes móviles", solo módulos de biblioteca).
  • Al ser una aplicación de Erlang, le brinda una forma sencilla de pasar los parámetros de configuración a su aplicación. Cuando pasa -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.
  • El archivo * .app tiene secciones en las que enumera los módulos y procesos registrados que presenta su aplicación. Esto se usa al construir versiones para verificar que no haya colisiones entre las aplicaciones.

Algunas características adicionales de aplicaciones Erlang que no conozco bien:

  • fases Start. Se usa para aplicaciones que tienen necesidades complejas de inicio, como por ejemplo "funcionar parcialmente" por un tiempo.
  • Aplicaciones distribuidas. Se utiliza para definir dónde debe ejecutarse la aplicación en un clúster.
  • Adquisición. Se utiliza para liberar una máquina de la aplicación distribuida, por ejemplo, si necesita mantenimiento o actualización.

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.

+0

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

+0

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. –

+0

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

Cuestiones relacionadas