Tôi đang tạo ứng dụng web Clojure Noir để chạy dưới dạng tệp WAR trong CloudFoundry.Móc khởi tạo cho Clojure Noir WAR/Servlet (CloudFoundry)
Trong project.clj của tôi, tôi có:
:ring {:handler appname.server/handler}
Trong server.clj tôi tạo một handler sử dụng Noir:
(def handler (noir.server/gen-handler {:ns 'appname}))
tôi xây dựng các tập tin WAR sử dụng một plugin vòng Lein:
lein ring uberwar
Sau đó, chuyển sang CloudFoundry bằng cách sử dụng:
vmc push appname
Trình xử lý yêu cầu hoạt động tốt và tôi có thể duyệt đến URL của ứng dụng tốt.
Vì vậy, câu hỏi đặt ra là: cách chính xác để khởi tạo khi ứng dụng được bắt đầu là gì?
tôi có thể làm như sau trong server.clj:
(when (System/getenv "VCAP_APPLICATION")
(init-func))
Nhưng có một vài vấn đề với điều đó. Đầu tiên, có vẻ như đó là làm việc khởi tạo vào thời điểm sai (khi mã được đọc/đánh giá thay vì khởi động ứng dụng). Thứ hai, bảo vệ là cụ thể cho CloudFoundry và tôi chắc chắn có một cách thức WAR hợp lý để làm điều này.
Tôi nghĩ rằng đây là mục đích của phương thức contextInitialized trên ServletContextListener nhưng làm thế nào để móc nối với Noir/ring?