Câu hỏi Thường gặp & Xử lý Sự cố
🌐 Bản dịch & Đóng góp: Bạn muốn dịch hoặc cải thiện tài liệu này bằng ngôn ngữ của mình? Xem Hướng dẫn Dịch thuật.
Tài liệu này bao gồm các câu hỏi thường gặp, hướng dẫn chuyển đổi dự án và các bước chẩn đoán xử lý sự cố trong Fish.
Các Câu hỏi Thường gặp (FAQ)
1. Fish có thay thế Cargo, npm hay go build không?
Không. Fish là hệ thống điều phối build (orchestrator), không phải là trình biên dịch thay thế. Nó kết nối các chuỗi công cụ hiện có của bạn (Cargo, rustc, Node.js, Go, GCC/Clang, dotnet), phân tích đồ thị phụ thuộc hợp nhất và tăng tốc quá trình build thông qua bộ nhớ đệm hermetic, lập lịch song song và thực thi phân tán.
2. Làm thế nào để chuyển đổi monorepo hiện có sang Fish?
Fish tự động phát hiện các dự án từ tệp manifest (Cargo.toml, package.json, go.mod, pyproject.toml, CMakeLists.txt, pom.xml, *.csproj).
- Điều hướng tới thư mục gốc dự án của bạn.
- Chạy
fish buildđể Fish tự động khám phá toàn bộ workspace. - (Tùy chọn) Tạo tệp
fish.tomltại thư mục gốc để tùy biến phụ thuộc pipeline và đường dẫn cache.
3. Cơ chế hoạt động của CAS Cache trong Fish như thế nào?
Fish tính toán mã băm Blake3 trên các tệp đầu vào, phiên bản toolchain và biến môi trường. Khi một tác vụ hoàn thành, các artifact sinh ra sẽ được nén bằng thuật toán Zstandard và lưu trong kho lưu trữ Content-Addressable Storage (CAS) tại ~/.fish/cache. Nếu đầu vào không thay đổi, Fish sẽ xuất trực tiếp artifact bằng Copy-on-Write extents hoặc hardlink mà không cần gọi lại trình biên dịch.
Các Tình huống Xử lý Sự cố
Vấn đề: Target bị build lại ngoài ý muốn
Giải pháp: Sử dụng cờ --explain để kiểm tra lý do target bị đánh dấu là dirty:
fish build --explainCác nguyên nhân phổ biến bao gồm:
- Một tệp mã nguồn vừa được chỉnh sửa (touch).
- Mã băm đầu ra của một phụ thuộc cấp trên bị thay đổi.
- Sự khác biệt về biến môi trường làm vô hiệu hóa cache.
Vấn đề: Sử dụng quá nhiều bộ nhớ RAM khi build song song
Giải pháp: Khi biên dịch đồng thời nhiều crate lớn hoặc module C++, áp lực bộ nhớ có thể dẫn đến hiện tượng swap ổ đĩa. Hãy sử dụng cờ --ram-limit hoặc cấu hình ram_limit trong fish.toml:
fish build --ram-limit 80Bộ điều tiết tài nguyên của Fish sẽ tự động giảm mức độ đồng thời mỗi khi mức tiêu thụ RAM vượt quá ngưỡng quy định.
Vấn đề: Xung đột cổng Daemon chạy ngầm (9527)
Giải pháp: Nếu cổng 9527 đang bị chiếm bởi một tiến trình khác, hãy chỉ định cổng tùy chỉnh:
fish daemon start --port 9588Hoặc thiết lập biến môi trường:
export FISH_DAEMON_PORT=9588Vấn đề: Lỗi khóa tệp trên Windows (os error 5: Access is denied)
Giải pháp: Trên Windows, việc chạy một file nhị phân trực tiếp từ thư mục target/debug sẽ khóa file thực thi trên ổ đĩa. Hãy cài đặt Fish toàn cục vào %USERPROFILE%\.cargo\bin:
cargo install --path crates/fish-cli --forceSau đó gọi lệnh fish trực tiếp từ bất kỳ thư mục nào.