2015-07-01 16 views
8

Tôi gặp sự cố với nhà soạn nhạc . Tôi đang làm việc với git trong môi trường địa phương. Tôi là người duy nhất phát triển.Tại sao nhà soạn nhạc loại bỏ các phụ thuộc của tôi khi triển khai?

Khi tôi cần thêm một số phụ thuộc (hoặc cần thay đổi một số phiên bản), tôi chỉnh sửa composer.json và chạy composer install cục bộ.

Mọi thứ đều ổn.

Sau đó, khi mọi thứ hoạt động tại địa phương, tôi cam kết thay đổi của tôi (bao gồm composer.jsoncomposer.lock) và đẩy đến máy chủ sản xuất của tôi.

Một sau khi nhận được tập lệnh cập nhật nguồn và chạy composer install trên máy chủ từ xa.

gì được mong đợi:

  • Composer nên cài đặt các phụ thuộc mới theo composer.lock tập tin.
  • Tôi sẽ rất vui.

gì xảy ra:

  • Composer là tức giận:

Cảnh báo: Các tập tin khóa không được cập nhật với những thay đổi mới nhất trong composer.json. Bạn có thể nhận được sự phụ thuộc lỗi thời. Chạy cập nhật để cập nhật chúng.

  • Composer loại bỏ tất cả phụ thuộc.
  • Sản xuất bị hỏng.
  • Tôi bị đau tim
  • Tôi phải đăng nhập vào máy chủ của mình qua ssh và chạy composer update để mọi thứ hoạt động tốt, nhưng tôi biết rằng không nên sử dụng composer update trên máy chủ sản xuất.

Dưới đây là kết quả của phần này hậu nhận nhà soạn nhạc của:

composer install 
Loading composer repositories with package information 
Installing dependencies (including require-dev) from lock file 
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them. 
    - Removing guzzle/guzzle (v3.9.3) 
    - Removing symfony/event-dispatcher (v2.7.1) 
    - Removing geoip/geoip (v1.15) 
    - Removing pimple/pimple (v3.0.0) 
    - Removing cocur/slugify (1.1.x-dev) 
    - Removing bentools/url (0.2) 
    - Removing bentools/simplexmlextended (1.2.0) 
Generating autoload files 

Tôi đang làm gì sai?

Cảm ơn, Bến

Trả lời

5

Cảnh báo này

Cảnh báo: Các tập tin khóa không được cập nhật với những thay đổi mới nhất trong composer.json, bạn có thể nhận được phụ thuộc đã lỗi thời, chạy update để cập nhật chúng.

xảy ra khi md5sum của composer.json của bạn khác với một lưu trong composer.lock:

{ 
    "hash": "b15ed9405e8547867f74973ce8add172", 
    "packages": [ ... ] 
} 

Hãy chắc chắn rằng composer.json của bạn và composer.lock là hệt với những địa phương của bạn (so sánh md5sums họ) . Tôi nghi ngờ rằng một cái gì đó trong chuỗi triển khai của bạn không cập nhật chúng một cách chính xác.

Hãy chắc chắn rằng bạn đã bổ sung phụ thuộc của bạn tại địa phương với require lệnh:

composer require new/package ~2.5 

hoặc nếu composer.json đã được chỉnh sửa bằng tay ít nhất chạy

composer update new/package 

sau đó cho mỗi gói bổ sung thêm để đảm bảo rằng nó được thêm vào composer.lock chính xác của bạn.

Cách tiếp cận khác:
chạy composer update --lock trong quá trình sản xuất. Điều này sẽ cập nhật băm trong tệp khóa của bạn nhưng sẽ không nâng cấp nhà cung cấp của bạn.

Sau đó, chạy composer install để cài đặt nhà cung cấp từ số comoser.lock của bạn.

0

Khi tôi cần thêm một số phụ thuộc (hoặc cần phải thay đổi một số phiên bản), tôi chỉnh sửa composer.json và chạy trình soạn nhạc cục bộ.

Điều đó sai. Bạn có thể chỉnh sửa composer.json và sau đó phải chạy composer update hoặc bạn để Composer thực hiện chỉnh sửa nội bộ tệp json và chỉ chạy composer require new/package (tùy chọn với phiên bản). Dù sao đi nữa, bạn nên kết thúc với một tập tin composer.jsoncomposer.lock đã thay đổi, gắn BOTH vào kho lưu trữ của bạn và kết quả mong đợi là tệp khóa sẽ chứa tất cả các gói trong các phiên bản chính xác, sẽ được cài đặt trong quá trình sản xuất hoạt động thường xuyên composer install.

Lưu ý rằng quy trình làm việc của bạn vẫn rất nguy hiểm. Nếu bạn đẩy, và Github đang xuống - bạn sẽ nhận được các ZIP để cài đặt như thế nào?

+0

OK, tôi sẽ làm theo cách này sau đó. Đối với trường hợp github là xuống, lời khuyên của bạn là gì? – user4994579

+0

Cả Git lẫn Composer đều không phải là công cụ triển khai. Chúng được sử dụng rất nhiều, nhưng điều đó không có nghĩa đó là giải pháp tốt nhất. Nói chung, bạn nên đặt cùng một ZIP hoặc TGZ chứa tất cả các mã cần thiết cho bản cập nhật sản xuất (bao gồm cả mã trong Git cũng như mọi thứ từ Composer), di chuyển nó đến máy sản xuất, giải nén nó, (kiểm tra nó trong một ẩn nơi - tùy chọn), và sau đó chuyển sang nó ngay lập tức.Có những công cụ cho việc này - Capistrano là một trong số đó. Để tránh thời gian ngừng hoạt động của Github và truy cập nhanh hơn, hãy sử dụng Satis để tạo một bản sao phụ thuộc cục bộ mà bạn sử dụng. Chi tiết sẽ đảm bảo một câu hỏi mới. – Sven

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