2009-11-28 6 views
7

Non ho mai veramente usato i file .app per i miei progetti. Capisco quelli sono necessari per il caricamento di un'applicazione tramite il modulo application.Beneficiare del file ".app" in Erlang?

Esiste un altro uso di tali file?

risposta

11

Il * .app insieme al file * .rel viene utilizzato per generare script di avvio. Uno script di avvio viene utilizzato per avviare automaticamente la mia applicazione all'avvio di erlang. Un file di risorse dell'applicazione descrive quali applicazioni devono essere in esecuzione prima che la mia applicazione possa essere avviata. Ad esempio, se uso mnesia e lo indico nel file .app per la mia applicazione, quando creo uno script di avvio e lo utilizzo per avviare la mia applicazione, avvierà mnesia per me all'avvio della mia applicazione.

Mentre è possibile ottenere l'installazione/gestione delle dipendenze automatiche con altri gestori di pacchetti, lo script di avvio è utile per gestire le dipendenze nell'avvio dell'applicazione che è importante in una configurazione dell'applicazione OTP.

note: le applicazioni in otp si riferiscono a un insieme di processi in esecuzione e/o codice. le applicazioni possono dipendere da altre applicazioni in vari modi. O richiedono il codice da installare o richiedono che l'applicazione sia in esecuzione.

+0

Sebbene non abbia riscontrato una situazione in cui l'ordine dei gruppi di applicazioni è importante, posso apprezzarne l'utilità. Grazie! – jldupont

8

Vengono utilizzati per la creazione di versioni (con * .rel per generare script di avvio). Ti consiglio di iniziare con il file * .app e con il callback del comportamento dell'applicazione. Per quanto riguarda l'avvio con OTP. E 'un punto debole bella in fase di sviluppo da fare:

-module(foo). 
-export([start/0]). 
start() -> 
    [application:start(A) || A <- [sasl, inets, x, y, etc]]. 

per avviare tutte le applicazioni che dipendono da dover correre per la vostra applicazione con un semplice

$ erl -s foo 
  • Se il progetto deve essere utilizzato come servizio o framework per altri progetti, un altro vantaggio è che quelle applicazioni Erlang possono a loro volta dipendere o includere la vostra applicazione. Un'applicazione Erlang è l'unità in cui fornire servizi e persino librerie (stdlib è una libreria, non "parti mobili", solo moduli di libreria).
  • Essendo un'applicazione Erlang offre un modo semplice per passare i parametri di configurazione all'applicazione. Quando si passa -mnesia dir '"/some/path"' a erl, si accede dall'applicazione mnesia come application:get_env(mnesia, dir). Se si definisce un'applicazione denominata foo, è possibile passare a -foo key 'some-Erlang-literal' in erl. Il file * .app può contenere valori predefiniti nella sezione env, il file * .rel li sostituisce e la riga di comando lo sovrascrive.
  • Il file * .app contiene sezioni in cui vengono elencati i moduli ei processi registrati introdotti dall'applicazione. Questo viene utilizzato quando si creano versioni per verificare che non vi siano collisioni tra le applicazioni.

Alcune funzioni aggiuntive di applicazioni Erlang che io non conosco bene:

  • fasi di avvio. Utilizzato per applicazioni che hanno esigenze di avvio complesse, come ad esempio "parzialmente in esecuzione" per un po '.
  • Applicazioni distribuite. Utilizzato per definire dove deve essere eseguita l'applicazione in un cluster.
  • Acquisto. Utilizzato per rilasciare una macchina dall'applicazione distribuita, ad esempio se necessita di manutenzione o aggiornamento.

Eventualmente inizierai a voler avviare l'applicazione impostata in un modo più strutturato, e cioè quando l'intero rilascio/script di avvio diventerà più comprensibile. Al contrario, penserai che sia eccessivo per te per esigenze specifiche. Inizia con un semplice * .app e un modulo con i callback del comportamento dell'applicazione. Non guarderai indietro.

+0

Grazie per il vostro contributo. Sono abituato a confezionare le mie applicazioni per la distribuzione utilizzando un repository Debian (vale a dire le dipendenze sono gestite, l'installazione/aggiornamento ecc.). In questo contesto, cosa mi prendo OTP/.app? – jldupont

+0

se il tuo file .app è configurato, il codice sopra è superfluo. Solo l'applicazione: start (my_app) è tutto ciò che è necessario per avviare tutte le tue dipendenze e quindi la tua app. Se hai generato uno script di avvio, puoi fare in modo che quanto sopra si verifichi automaticamente all'avvio di erlang. –

+0

Aggiunta ai vantaggi: i file .app consentono allo script di avvio di rilevare i moduli duplicati o i nomi dei processi all'interno delle applicazioni. Inoltre, consente alla VM di caricare tutti i moduli all'avvio, quindi è possibile utilizzare la modalità incorporata. Puoi anche applicare le versioni corrette delle applicazioni, ecc ... – Zed