2011-01-20 32 views
8

Tôi đã làm theo hướng dẫn here, đối với chữ cái. Sau đó tôi chạy lệnh để tạo cấu trúc dự án ứng dụng và nhận được lỗi sau.cốt thép: lỗi thoát khi tạo ứng dụng: {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}]}} 

Bất kỳ ý tưởng nào tôi đang làm sai?

Trả lời

11

Dường như Erlang của bạn đã được biên soạn mà không có OpenSSL (mô-đun mã hóa). crypto là cần thiết cho nhiều ứng dụng Erlang. Bạn sẽ cần phải có được một phiên bản của Erlang với một mô-đun mã hóa làm việc, và sau đó bạn không nên có bất kỳ vấn đề như thế này.

+0

ahh. Một cửa sổ cài đặt. Tôi bắt đầu nhận ra rằng Erlang trên các cửa sổ có lẽ kém dễ chịu hơn trên Linux. Có cách nào để xem liệu nó được xây dựng với OpenSSH?Hoặc tìm phiên bản được tạo sẵn cho Cygwin 1.7+ (đó là những gì tôi thường sử dụng để vượt qua việc phải làm việc trên các cửa sổ) Tôi không thấy gì tương tự trong ... \ erlang \ erl5.8.1.1 \ erts- 5.8.1.1 \ thư mục bin. –

+2

Tôi sẽ giúp nếu có thể, nhưng tôi chưa bao giờ sử dụng Erlang trên Windows. –

+1

đánh một người đàn ông trong khi anh ta xuống, tại sao bạn không! ; ^] –

6

Giải thích cho câu hỏi của bạn là câu trả lời của VALID (thêm vào câu trả lời vì nhận xét quá ngắn).

Có thể Erlang đã được biên dịch đúng cách nhưng các thư viện OpenSSL không hiển thị với Erlang, vì vậy máy chủ mật mã không thể khởi động được. Tôi biên soạn Erlang trên Solaris 10 và nó không phàn nàn về OpenSSL không được cài đặt. Trong thực tế, nó đã biên dịch mã hóa và cài đặt nó trong: /usr/local/lib/erlang/lib/crypto-2.2/

Nhưng cốt thép vẫn không hoạt động. Thật dễ dàng để kiểm tra xem vấn đề có thực sự xảy ra với mô-đun mã hóa hay không.

Mở vỏ Erlang và nhập crypto:start(). Điều này đã được xảy ra trên hệ thống của tôi:

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

Nếu OpenSSL được cài đặt ở một vị trí phi tiêu chuẩn, vì nó là trường hợp khi sử dụng OpenCSW để cài đặt OpenSSL trên Solaris 10, nó rất dễ dàng để giải quyết vấn đề bằng cách thêm đường dẫn thư viện đến biến môi trường. Ví dụ trên Solaris 10 đến/etc/profile:

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

Sau đó log-out và đăng nhập hoặc tái nạp môi trường bash, ví dụ như thế này:

bash-3.2# . /etc/profile 

Kết quả:

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

Bắt lỗi này khi chạy làm cho lệnh:

[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 

Chi tiết erlang là:

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

Có vẻ như mật mã không hoạt động, khi lệnh cho "Ok" hoặc "lỗi ngoại lệ".

Trợ giúp cần thiết.

+2

Bạn đã quên "." vào cuối của crypto: start(), do đó, nó đã không thực hiện được nêu ra. – Oscar

0

Cảm ơn câu trả lời Ivan. Nhưng có vẻ như tôi đã tìm ra vấn đề: Cập nhật tự động ubuntu đã bị tắt và các phụ thuộc không được cài đặt trong khi biên dịch erlang (ví dụ: libssh-dev). Một khi cập nhật tự động được bật nó biên dịch và làm cho lệnh chạy tốt.

Các vấn đề liên quan