2009-11-28 29 views
7

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?

Trả lời

11

* .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.

+0

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

8

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 
  • Nếu dự án của bạn được sử dụng như một dịch vụ hoặc khuôn khổ cho các dự án khác, một lợi ích khác là các ứng dụng Erlang đó có thể lần lượt phụ thuộc vào hoặc bao gồm ứng dụng của bạn. Ứng dụng Erlang là đơn vị cung cấp dịch vụ và thậm chí cả thư viện (stdlib là thư viện, không có "bộ phận chuyển động", chỉ là các mô-đun thư viện).
  • Là ứng dụng Erlang cung cấp cho bạn một cách đơn giản để chuyển các tham số cấu hình cho ứng dụng của bạn. Khi bạn vượt qua -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 đó.
  • Tệp * .app có các phần nơi bạn liệt kê các mô-đun và quy trình đăng ký mà ứng dụng của bạn giới thiệu. Điều này được sử dụng khi tạo bản phát hành để kiểm tra xem không có xung đột giữa các ứng dụng.

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õ:

  • Bắt đầu giai đoạn. Được sử dụng cho các ứng dụng có nhu cầu khởi động phức tạp, chẳng hạn như "đang chạy một phần" trong một thời gian.
  • Ứng dụng được phân phối. Được sử dụng để xác định nơi ứng dụng sẽ chạy trong một cụm.
  • Tiếp quản. Được sử dụng để phát hành một máy từ ứng dụng được phân phối, chẳng hạn như nếu nó cần bảo trì hoặc nâng cấp.

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.

+0

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

+0

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. –

+0

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