2012-03-16 18 views
7

Có thể cập nhật tệp deps theo cách thủ công để lấy phiên bản mới nhất của Doctrine 2.2? Tôi muốn sử dụng thành phần Paginator mới. Vì vậy, về cơ bản tôi đã suy nghĩ để tinh chỉnh deps với:Cập nhật thủ công tệp Symfony2 deps để nhận Doctrine 2.2?

[doctrine-common] 
    git=http://github.com/doctrine/common.git 
    version=2.2.1 

[doctrine-dbal] 
    git=http://github.com/doctrine/dbal.git 
    version=2.2.1 

[doctrine] 
    git=http://github.com/doctrine/doctrine2.git 
    version=2.2.1 

Di deps.lock và làm:

php bin/vendors update 

Bạn có nghĩ rằng sẽ làm việc?

EDIT: các tập tin sẽ trông như thế này: http://pastebin.com/FEDMNhii

Trả lời

8

Theo tôi, tất cả công việc được đề xuất bởi gilden là không cần thiết và quá thận trọng. Tất nhiên bạn có thể tự cập nhật tệp deps của mình với bất kỳ thứ gì bạn muốn. Tôi hiện đang chạy Doctrine \ Common (2.2.1), Doctrine \ DBAL (2.2.1) và Doctrine (2.2.1) trên Symfony 2.0.11 mà không có vấn đề gì.

Nó không phải là các thư viện mà bạn cần phải lo lắng về (thường), nó là rằng sử dụng các thư viện đòi hỏi phiên bản cụ thể (s). Ví dụ, Symfony2 không phụ thuộc trực tiếp vào bất kỳ phiên bản nào của Doctrine - nhưng DoctrineBundle thực hiện.

Trước khi nâng cấp gói/thư viện, bạn nên kiểm tra các phụ thuộc bắt buộc của họ trên Packagist.org. Tìm kiếm gói bạn muốn nâng cấp và xem những phụ thuộc bắt buộc mà họ xác định. Lưu ý: Điều này sẽ không được yêu cầu trên Symfony 2.1 vì nó sẽ sử dụng Composer để quản lý thư viện của nhà cung cấp.

Mặc dù, bạn sẽ không bao giờ biết có điều gì đó phù hợp với cài đặt của bạn hay không trừ khi bạn thử. Tất nhiên, đừng làm bất cứ điều gì ngu ngốc - nhưng không có lý do gì để sợ phá vỡ mọi thứ bằng cách cập nhật thư viện của nhà cung cấp. Lưu trữ mã của bạn trong Git và bạn có thể dễ dàng hoàn nguyên các thay đổi của mình.Xem: How to create and store a Symfony2 project in Git


Ngoài ra, khi xác định version=#.#.# trong deps - ngay cả khi bạn không có một tập tin deps.lock ở tất cả, bạn sẽ luôn luôn nhận được cùng một cam kết băm bởi vì bạn đang xác định thẻ Git trên kho.

Một số gói, thay vì cung cấp số phiên bản, sẽ cung cấp các nhánh khác nhau để quản lý khả năng tương thích với nhiều phiên bản Symfony. Vì vậy, bạn có thể thấy một cái gì đó như version=origin/2.0 có nghĩa là các nhà cung cấp kịch bản sẽ kiểm tra các cam kết mới nhất trên chi nhánh có tên 2.0 của kho. Người duy trì sẽ cố gắng giữ cho nhánh đó luôn tương thích với Symfony 2.0.x.

+0

Giải thích tốt, +1. Btw, khi nào Symfony 2.1 sẽ có sẵn? – gremo

-1

Bằng cách loại bỏ các tập tin deps.lock bạn rõ ràng đang đặt mình vào nguy cơ để nhận được mã không ổn định.

Tôi đã sử dụng các bước sau để giảm thiểu nguy cơ phá vỡ một cái gì đó:

  • Viết xuống hiện cam kết hash của các thành phần bạn muốn cập nhật từ deps.lock
  • Tìm băm cam kết từ GitHub và viết nó xuống.
  • Điều hướng đến thư mục của một thành phần và nhập git checkout [commit] trong đó [cam kết] là băm mới.
  • Xóa bộ nhớ cache của bạn và xác minh rằng trang web vẫn hoạt động nhiều hơn hoặc ít hơn.
  • Dán cam băm mới để deps.lock và chạy bin/vendors install

Hãy ghi nhớ rằng tôi mạnh mẽ sẽ tư vấn cho chống lại điều này. Nếu bạn vặn vẹo mọi thứ, bạn khá nhiều và không có ai để giúp bạn.

+0

Cảm ơn bạn. Tôi đã làm một thử nghiệm nhanh chóng trên một cài đặt mới và tất cả có vẻ tốt (thế hệ thực thể, truy vấn và vv). Nhưng một lần nữa cảm ơn lời khuyên. – gremo

+1

tại sao không chỉ đơn giản là tiết kiệm deps và deps.lock (hoặc sử dụng git) và trong trường hợp một cái gì đó phá vỡ bạn hoàn nguyên thay đổi của bạn và cập nhật các nhà cung cấp của bạn một lần nữa. Nó sẽ tải xuống mọi thứ như được chỉ định trong deps.lock? – Sgoettschkes

+0

Tôi đồng ý rằng lời khuyên này có vẻ quá thận trọng và phức tạp khi deps.lock có thể được lưu và khôi phục trong trường hợp xảy ra thảm họa. – user1207727

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