2013-02-05 37 views
14

Tôi đang cố gắng sử dụng CircleCI để xây dựng một số dự án Haskell. Vòng tròn sẽ tự động lưu trữ thư mục /home/ubuntu/.cabal sau mỗi lần xây dựng và tôi nghĩ rằng sẽ tăng tốc các bản dựng, nhưng chúng dường như chỉ cần miễn là trước đây --- tất cả những gì bị bỏ qua là bước tải xuống.Tại sao cabal cài đặt lại gói cài đặt đã có trong .cabal/lib

Các hướng dẫn xây dựng Tôi đang sử dụng là

cabal update 
cabal install --only-dependencies --enable-tests 
cabal configure --enable-tests 
cabal build 
cabal test 

và tôi dự đoán rằng install --only-dependencies bước sẽ thấy bộ nhớ cache và chạy nhanh hơn.

Điều gì có thể xảy ra?

Trả lời

4

Đã có excellent Reddit discussion sự cố về cabal một vài tháng trước. Nhớ lại của tôi là Haskell không có giao diện nhị phân ứng dụng được chỉ định và trình biên dịch ghc thực hiện rất nhiều việc giảm đồ thị liên tục trong quá trình biên dịch. Kết quả là, không có những thứ như cài đặt thư viện ổn định trong ứng dụng Haskell - bất kỳ thư viện nào cũng có thể bị kéo xuống và biên dịch lại với toàn bộ thư viện đã được cài đặt sẵn.

Điểm mấu chốt ở đây là lưu vào bộ nhớ đệm thư mục .cabal/lib không có gì để tăng tốc độ cài đặt. Việc biên dịch lại các phụ thuộc sẽ luôn xảy ra. Cách tiếp cận tốt nhất của bạn, ngoài hộp cát bằng cách sử dụng hsenv, là chỉ định toàn bộ thư viện phụ thuộc của bạn khi bạn gọi cabal install. Bằng cách đó, các phụ thuộc có thể được tính toán trước thời hạn, và việc biên dịch chỉ nên xảy ra một lần.

Rất kinh nghiệm, xin vui lòng sửa tôi nếu bất cứ điều gì tôi nói ở đây là nhầm lẫn. Tôi đã được ra khỏi vòng lặp Haskell cho một vài tháng, và tôi nhận thức được rằng vấn đề cabal/thư viện đã nhận được rất nhiều sự chú ý gần đây.

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