it-swarm-vi.com

Triển khai các thay đổi phức tạp

Đôi khi, chúng ta cần triển khai các thay đổi khá phức tạp cho một trang web yêu cầu thay đổi cơ sở dữ liệu (bảng mới hoặc đã thay đổi) và mã nguồn động (chẳng hạn như PHP hoặc ColdFusion). Cách tốt nhất để đóng gói và triển khai những thay đổi này một cách nhanh chóng mà không phá vỡ mọi thứ trên trang web trực tiếp là gì?

4
Justin Scott

Câu trả lời ngắn gọn: đó là một cơn đau ở cổ!

Tôi đã phải làm điều này nhiều lần (và mỗi lần khiến tôi muốn nghĩ về thiết kế của mình nhiều hơn trong dự án tiếp theo tôi làm). Những gì tôi làm là phân tách codebase sang phần Phát triển (hoặc thư mục hoặc máy chủ, v.v.) để tôi có thể làm việc riêng với nó để đảm bảo tất cả các lỗi đã được loại bỏ trước khi chuyển sang triển khai. Sau đó tôi tạo một tập lệnh SQL luôn có hai dòng đầu tiên giống nhau:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Điều này sẽ đảm bảo rằng tập lệnh đưa mọi thứ vào một cơ sở dữ liệu hoàn toàn mới và trống. Phần còn lại của tập lệnh sẽ tạo lại tất cả các bảng mà tôi đang sử dụng lại từ cơ sở dữ liệu cũ sang cơ sở dữ liệu mới. Sau đó, tôi sẽ tạo các bảng mới (hoặc sửa đổi) vào cơ sở dữ liệu mới. Cuối cùng tôi sẽ chuyển tất cả dữ liệu từ máy chủ trực tiếp sang máy chủ phát triển. Điều này có thể mất nhiều thời gian tùy thuộc vào lượng dữ liệu bạn đang di chuyển và tốc độ bạn có thể di chuyển nó, vì vậy tôi khuyên bạn nên suy nghĩ về kịch bản một cách cẩn thận bởi vì bạn càng ít phải chạy nó thì càng tốt.

Sau khi tôi có cơ sở dữ liệu phát triển mới và chạy, phần còn lại là tạo mã mới để sử dụng nó. Khi đã được băm ra, thì việc triển khai sẽ tương đối dễ dàng (mặc dù có thể tốn thời gian). Chỉ cần sử dụng cùng một tập lệnh để sao chép tất cả dữ liệu trực tiếp mới vào cơ sở dữ liệu mới trên máy chủ triển khai và sao chép tất cả mã mới ở đó và bạn đã hoàn tất!

Đây là cách tôi làm điều đó, và trong khi nó là một nỗi đau, nó làm việc. Nếu có cách nào tốt hơn, tôi rất vui khi nghe.

Cập nhật : Để phản hồi bình luận của Tchalvak, vâng tôi thường sử dụng cách sau để nhận tất cả các định nghĩa bảng mà không có dữ liệu thực tế của chúng:

mysqldump --databases --no-data databaseName > newScript.sql

Sau đó tôi sẽ thay đổi tập lệnh này như được mô tả ở trên.

3
Mike

Để đạt được "khả năng phục hồi", tôi thực sự khuyên bạn nên tìm hiểu (cũng) git hoặc Mercurial(hệ thống kiểm soát phiên bản phân tán) .

Ngày mà bạn nên làm việc với mã nguồn của mình trong các tệp phẳng đã hết (bây giờ bạn nên làm việc với nó trong các tệp phẳng nhưng có một hệ thống kiểm soát thay đổi thực sự mạnh mẽ theo dõi chúng).

2
Kzqai

Tôi thường làm (đối với các trang web kiểu LAMP):

  1. xác định các thay đổi của bạn sau đó viết tập lệnh để áp dụng chúng (Tôi sử dụng Makefile).
  2. Kiểm tra thay đổi của bạn trên một mẫu dữ liệu đại diện cho môi trường thực
  3. Kiểm tra một lần nữa để đảm bảo
  4. Cho mình một lối thoát, có khả năng quay lại

Nếu bạn đang chạy một cụm, thì bạn có thể bị đau đầu nhiều hơn với trạng thái trang web, bộ nhớ cache và như vậy.

0
Aiden Bell