Tôi chưa bao giờ thực sự sử dụng các tệp .app
cho các dự án của mình. Tôi hiểu những điều đó là bắt buộc để tải ứng dụng thông qua mô-đun application
.Lợi ích cho tệp ".app" trong Erlang?
Có sử dụng tệp nào khác không?
Tôi chưa bao giờ thực sự sử dụng các tệp .app
cho các dự án của mình. Tôi hiểu những điều đó là bắt buộc để tải ứng dụng thông qua mô-đun application
.Lợi ích cho tệp ".app" trong Erlang?
Có sử dụng tệp nào khác không?
* .app cùng với tệp * .rel được sử dụng để tạo tập lệnh khởi động. Một kịch bản khởi động được sử dụng để tự động khởi động ứng dụng của tôi khi erlang được khởi động. Tệp tài nguyên ứng dụng mô tả những ứng dụng nào cần chạy trước khi ứng dụng của tôi có thể được khởi chạy. Ví dụ, nếu tôi sử dụng mnesia và chỉ ra rằng trong tệp .app cho ứng dụng của tôi, khi tôi tạo một kịch bản khởi động và sử dụng nó để khởi động ứng dụng của tôi, nó sẽ bắt đầu mất trí nhớ cho tôi khi bắt đầu ứng dụng của riêng tôi.
Mặc dù bạn có thể cài đặt/xử lý phụ thuộc tự động với các trình quản lý gói khác, tập lệnh khởi động rất hữu ích để quản lý các phụ thuộc trong khởi động ứng dụng của bạn, điều quan trọng trong thiết lập ứng dụng OTP.
lưu ý: các ứng dụng trong otp đề cập đến một loạt các quy trình và/hoặc mã đang chạy. các ứng dụng có thể phụ thuộc vào các ứng dụng khác theo một số cách. Hoặc là họ yêu cầu mã được cài đặt hoặc họ yêu cầu ứng dụng phải chạy.
Chúng được sử dụng để xây dựng bản phát hành (có * .rel để tạo tập lệnh khởi động). Tôi khuyên bạn chỉ nên bắt đầu với tệp * .app và gọi lại hành vi ứng dụng. Để bắt đầu với OTP. Đó là một điểm nhạy cảm ngơi thoải mái tại phát triển để làm:
-module(foo).
-export([start/0]).
start() ->
[application:start(A) || A <- [sasl, inets, x, y, etc]].
để bắt đầu tất cả các ứng dụng mà bạn phụ thuộc vào việc có chạy cho các ứng dụng của bạn với một đơn giản
$ erl -s foo
-mnesia dir '"/some/path"'
để xóa, ứng dụng này sẽ được truy cập bởi ứng dụng mnesia là application:get_env(mnesia, dir)
. Nếu bạn xác định một ứng dụng có tên là foo
, bạn có thể vượt qua -foo key 'some-Erlang-literal'
để xóa. Tệp * .app có thể chứa các giá trị mặc định trong phần env
, tệp * .rel ghi đè chúng và dòng lệnh ghi đè điều đó.Một số tính năng bổ sung của các ứng dụng Erlang mà tôi không biết rõ:
Cuối cùng, bạn sẽ bắt đầu muốn bắt đầu ứng dụng của mình theo cách có cấu trúc hơn và đó là khi toàn bộ bản phát hành/tập lệnh khởi động trở nên dễ hiểu hơn. Hoặc ngược lại, bạn sẽ nghĩ rằng nó là quá mức cần thiết cho các nhu cầu cụ thể của bạn. Chỉ cần bắt đầu với một * .app đơn giản và một mô-đun với các lời gọi hành vi ứng dụng. Bạn sẽ không nhìn lại.
Cảm ơn sự đóng góp của bạn. Tôi được sử dụng để đóng gói các ứng dụng của mình để triển khai sử dụng kho lưu trữ Debian (nghĩa là các phụ thuộc được xử lý, cài đặt/nâng cấp, v.v.). Trong bối cảnh này, OTP/.app có được gì? – jldupont
nếu tệp .app của bạn được thiết lập thì mã trên không cần thiết. Chỉ cần ứng dụng: bắt đầu (my_app) là tất cả những gì cần thiết để bắt đầu tất cả các trường hợp của bạn và sau đó là ứng dụng của bạn. Nếu bạn đã tạo tập lệnh khởi động thì bạn có thể tự động diễn ra ở trên cho bạn khi bắt đầu xóa. –
Thêm vào các lợi ích: tệp .app cho phép xây dựng kịch bản lệnh khởi động để phát hiện các mô-đun trùng lặp hoặc tên quá trình trong các ứng dụng. Ngoài ra nó cho phép máy ảo tải tất cả các mô-đun lúc bắt đầu, vì vậy bạn có thể sử dụng chế độ nhúng. Bạn cũng có thể thực thi các phiên bản chính xác của các ứng dụng, vv ... – Zed
Mặc dù tôi chưa gặp phải một tình huống mà thứ tự của các nhóm ứng dụng là quan trọng, tôi có thể đánh giá cao tính hữu ích của nó. Cảm ơn! – jldupont