2011-01-20 6 views
8

Postępowałem zgodnie z instrukcjami here, do listu. Następnie uruchomiłem instrukcję tworzenia struktury projektu aplikacji i otrzymałem następujący błąd.pręt zbrojeniowy: wyjście błędu w 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}]}} 

Jakieś pomysły, co robię źle?

Odpowiedz

11

Wygląda na to, że Twój Erlang został skompilowany bez OpenSSL (moduł kryptograficzny). Kryptografia jest wymagana dla wielu (najbardziej?) aplikacji Erlang. Będziesz musiał pobrać wersję Erlanga z działającym modułem kryptograficznym, a wtedy nie powinieneś mieć takich problemów.

+0

ahh. Instalacja systemu Windows. Zaczynam rozumieć, że Erlang na Windowsie jest prawdopodobnie mniej przyjemny niż na Linuksie. Czy istnieje sposób sprawdzenia, czy został zbudowany przy użyciu OpenSSH?Lub znajdź wersję gotową stworzoną dla Cygwina 1.7+ (której normalnie używam, aby przejść do pracy przy Windows). Nie widzę niczego podobnego w moim ... \ erlang \ erl5.8.1.1 \ erts- 5.8.1.1 \ bin katalog. –

+2

Pomógłbym, gdybym mógł, ale nigdy nie używałem Erlanga w Windowsie. –

+1

uderzył mężczyznę, gdy on jest na dole, dlaczego nie! ; ^] –

6

Wyjaśnienie TWOJEJ ARGUMENTY JEST WAŻNĄ odpowiedzią (dodanie jako odpowiedź, ponieważ komentarz jest za krótki).

Możliwe, że Erlang został skompilowany poprawnie, ale biblioteki OpenSSL nie są widoczne dla Erlanga, więc serwer kryptograficzny nie może zostać uruchomiony. Skompilowałem Erlanga na Solarisie 10 i nie narzekałem na to, że OpenSSL nie jest zainstalowany. W rzeczywistości skompilował on krypto i zainstalował go w: /usr/local/lib/erlang/lib/crypto-2.2/

Ale Rebar wciąż nie działał. Łatwo sprawdzić, czy problem dotyczy modułu Crypto.

Otwórz skorupę Erlanga i wpisz crypto:start(). To się dzieje w moim systemie:

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'"}} 

Jeżeli OpenSSL jest zainstalowany w niestandardowej lokalizacji, jak to ma miejsce podczas korzystania OpenCSW zainstalować OpenSSL w systemie Solaris 10, to łatwo rozwiązać ten problem poprzez dodanie ścieżka biblioteki do zmiennej środowiskowej. Na przykład w systemie Solaris 10 do/etc/profile:

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

Następnie zalogować się i zalogować się lub ponowne załadowanie środowiska bash, na przykład tak:

bash-3.2# . /etc/profile 

Wynik:

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

otrzymuję ten błąd podczas uruchamiania zrobić komenda:

[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 

Erlang szczegóły są:

[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> 

Wygląda krypto nie działa, jak komenda daje „OK” lub „błąd wyjątku”.

Potrzebna pomoc.

+2

Zapomniałeś "." na końcu crypto: start(), więc jeszcze nie zostało wykonane. – Oscar

0

Dzięki za odpowiedź Ivan. Ale wydaje mi się, że znalazłem problem: Aktualizacje ubuntu zostały wyłączone, a zależności nie zostały zainstalowane podczas kompilacji erlangu (np. Libssh-dev). Po włączeniu automatycznej aktualizacji została skompilowana i polecenie zostało uruchomione poprawnie.