Para iniciar mi programa que hago la siguiente secuencia:Erlang - script de inicio
$ erl
> c(module1).
> c(module2).
> c(modulen).
modulen:start().
¿Hay alguna posibilidad de crear un script que me permiten lanzar mi programa?
Para iniciar mi programa que hago la siguiente secuencia:Erlang - script de inicio
$ erl
> c(module1).
> c(module2).
> c(modulen).
modulen:start().
¿Hay alguna posibilidad de crear un script que me permiten lanzar mi programa?
Usted podría utilizar un script de cargador que se encarga de iniciar su aplicación de manera OTP:
-module(XYZ_app).
-export([start/0]).
start() ->
application:start(inets),
application:start(XYZ).
Ejecuta ese script a través de un script de shell. Tenga cuidado con el uso de escript
si planea construir demonios que se ejecuten en el momento del arranque del sistema operativo ya que son complicados.
#!/bin/bash
erl -boot start_sasl -s XYZ_app start
Por supuesto que necesita su archivo XYZ.app
(es un ejemplo):
{application, tinycouch,
[{description, "tinycouch"},
{vsn, "0.1"},
{modules, [
tinycouch, tinycouch_app, tinycouch_sup,
tinycouch_server, tinycouch_logger_h, tinycouch_utils,
tinycouch_db, mod_tinycouch
]},
{registered, [tinycouch
,tinycouch_server
,tinycouch_sup
]},
{applications, [kernel, stdlib, sasl, inets]},
{env, []},
%% Application Start point
{mod, {tinycouch_sup, []}}]}.
... y todos sus archivos .erl
debe haber sido compilado.
Nota que si se va a distribuir su aplicación (por ejemplo Debian repositorio etc), probablemente debería considerar la posibilidad de un archivo make
compilar e instalar la aplicación.
Como nota final: también se puede ir con un archivo boot
(la última forma OTP) pero me parece que los muy restrictivo: un archivo de inicio ata su aplicación a específica lanzamiento de la versión de Erlang (y otras aplicaciones dependientes) . Es posible que su aplicación se pueda ejecutar en varias versiones de Erlang, pero deberá tener un proceso de compilación/publicación por separado para cada "versión de plataforma" que desee enviar.
Puede compilar los módulos con erlc
erlc module1 module2 module3
También puede crear un script para ejecutar programar
#!/usr/bin/escript
main(_) ->
modulen:start().
Luego, en la consola:
chmod +x start.erl
./start.erl
Puede usar erl -make
directamente, ya que supone que todos los archivos *.erl
deben compilarse en *.beam
, y omitirlos si no se han modificado desde la última compilación. Consulte el make module para lo que puede poner en su Emakefile
para cambiar ciertos comportamientos.
El uso de Makefile
para invocar esta estrategia de compilación también proporciona a otros usuarios un procedimiento de compilación familiar.
Tener una función de inicio de arranque como lo sugiere jldupont es una buena manera de iniciar su entorno de desarrollo. Incluso es lo suficientemente fino para usarlo en producción hasta cierto punto.
El siguiente paso es utilizar archivos de versión OTP completos (*.rel
) y generar scripts de arranque que inicien todas las aplicaciones en el orden en que *.app
especifiquen dependencias entre sí.
Dos maneras
precompilación su código
$ erlc module1.erl $ erl -s module1 funcname arg1 arg2 ....
o uso Escript
#!/usr/bin/env escript main() -> module1:fun(...)
Escript es una interfaz de secuencias de comandos para Erlang
Salida Sinan y Faxien: http://www.erlware.org
Te refieres a XYZ_app como en: "erl -boot start_sasl -s XYZ_app start", y "start" es el valor predeterminado si se omite. – Christian
@Christian: buena captura ... lo actualizaré. – jldupont
Los archivos de arranque no tienen que ser restrictivos. Utilizo un archivo make con un objetivo make boot que reconstruye el archivo de arranque para la distribución erlang disponible actualmente. Y los archivos de arranque hacen que comenzar un servicio sea muy fácil. –