2011-01-20 4 views
8

Ho seguito le istruzioni here, alla lettera. Ho quindi eseguito l'istruzione per creare una struttura di progetto dell'applicazione e ho ottenuto il seguente errore.tondo per cemento armato: errore uscita su create-app: {crypto, start, []}

$ ./rebar create-app appid=myapp 
Uncaught error in rebar_core: {'EXIT', 
           {undef, 
            [{crypto,start,[]}, 
            {rebar_core,run,1}, 
            {rebar,main,1}, 
            {escript,run,2}, 
            {escript,start,1}, 
            {init,start_it,1}, 
            {init,start_em,1}]}} 

Qualche idea su cosa sto facendo male?

risposta

11

Sembra che il tuo Erlang sia stato compilato senza OpenSSL (il modulo crittografico). crypto è richiesto per molte (la maggior parte?) applicazioni di Erlang. Avrai bisogno di ottenere una versione di Erlang con un modulo di crittografia funzionante, e quindi non dovresti avere problemi come questo.

+0

ahh. Un'installazione di Windows. Sto iniziando a rendermi conto che Erlang su Windows è probabilmente meno piacevole che su Linux. C'è un modo per vedere se è stato creato con OpenSSH?Oppure trova una versione pre-compilata per Cygwin 1.7+ (che è quello che uso normalmente per dover lavorare su Windows) Non vedo nulla di simile nel mio ... \ erlang \ erl5.8.1.1 \ erts- 5.8.1.1 directory \ bin. –

+2

Sarei d'aiuto se potessi, ma non ho mai usato Erlang su Windows. –

+1

colpisci un uomo mentre è giù, perché no? ; ^] –

6

Un chiarimento alla TUA ARGOMENTO È la risposta di VALIDO (aggiungendo come risposta perché il commento è troppo breve).

È possibile che Erlang sia stato compilato correttamente ma le librerie OpenSSL non sono visibili a Erlang, quindi non è possibile avviare il server crittografico. Ho compilato Erlang su Solaris 10 e non mi sono lamentato dell'installazione di OpenSSL. Infatti, ha compilato crypto e installato in: /usr/local/lib/erlang/lib/crypto-2.2/

Ma Rebar non funzionava ancora. È facile verificare se il problema è effettivamente con il modulo crittografico.

Aprire shell Erlang e digitare crypto:start(). Questo stava accadendo sul mio sistema:

bash-3.2# erl 
Erlang R15B03 (erts-5.9.3.1) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.9.3.1 (abort with ^G) 
1> crypto:start(). 
** exception error: undefined function crypto:start/0 
2> 
=ERROR REPORT==== 8-Feb-2013::15:28:43 === 
Unable to load crypto library. Failed with error: 
"load_failed, Failed to load NIF library: 'ld.so.1: beam.smp: fatal: relocation error: file /usr/local/lib/erlang/lib/crypto-2.2/priv/lib/crypto.so: symbol DES_ede3_cfb_encrypt: referenced symbol not found'" 
OpenSSL might not be installed on this system. 

=ERROR REPORT==== 8-Feb-2013::15:28:43 === 
The on_load function for module crypto returned {error, 
               {load_failed, 
                "Failed to load NIF library: 'ld.so.1: beam.smp: fatal: relocation error: file /usr/local/lib/erlang/lib/crypto-2.2/priv/lib/crypto.so: symbol DES_ede3_cfb_encrypt: referenced symbol not found'"}} 

Se OpenSSL è installato in una posizione non standard, come è il caso quando si utilizza OpenCSW installare OpenSSL su Solaris 10, è facile da risolvere il problema con l'aggiunta del percorso della libreria alla variabile di ambiente. Ad esempio, su Solaris 10 a/etc/profile:

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/csw/lib 
export LD_LIBRARY_PATH 

Poi log-out e log-in o ri-caricare l'ambiente di bash, per esempio come questo:

bash-3.2# . /etc/profile 

Risultato:

bash-3.2# erl 
Erlang R15B03 (erts-5.9.3.1) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.9.3.1 (abort with ^G) 
1> crypto:start(). 
ok 
1

Ottenere questo errore durante l'esecuzione rendere comando:

[email protected]:/var/www/html/ejabberd-master# make 
rm -rf deps/.got 
rm -rf deps/.built 
/usr/local/lib/erlang/bin/escript rebar get-deps && :> deps/.got 
Uncaught error in rebar_core: {'EXIT', 
          {undef, 
          [{crypto,start,[],[]}, 
          {rebar,run_aux,2, 
           [{file,"src/rebar.erl"},{line,163}]}, 
          {rebar,main,1, 
           [{file,"src/rebar.erl"},{line,58}]}, 
          {escript,run,2, 
           [{file,"escript.erl"},{line,757}]}, 
          {escript,start,1, 
           [{file,"escript.erl"},{line,277}]}, 
          {init,start_it,1,[]}, 
          {init,start_em,1,[]}]}} 
make: *** [deps/.got] Error 1 

I dettagli Erlang sono:

[email protected]:/home/node# erl 
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async- threads:10] [hipe] [kernel-poll:false] 

Eshell V7.0 (abort with ^G) 
1> crypto:start() 
1> 

Sembra come cripto non funziona, come il comando dà "Ok" o "errore di eccezione".

Aiuto necessario.

+2

Hai dimenticato il "." alla fine di crypto: start(), quindi non è ancora stato eseguito. – Oscar

0

Grazie per la risposta Ivan. Ma sembra che ho capito il problema: Gli aggiornamenti automatici di ubuntu sono stati disattivati ​​e le dipendenze non sono state installate durante la compilazione di erlang (ad es. Libssh-dev). Una volta attivato l'aggiornamento automatico, viene compilato e il comando viene eseguito correttamente.