it-swarm-vi.com

Có cách nào để phát hiện các thay đổi cơ sở dữ liệu được thực hiện bởi các tiện ích mở rộng của bên thứ ba không?

Tôi làm việc trong môi trường phát triển/dàn dựng/sản xuất và tôi gặp phải một số thách thức trong việc thúc đẩy mã từ môi trường này sang môi trường khác, đặc biệt là khi cần nâng cấp lên Joomla và phần mềm bên thứ ba khác.

Có cách nào để tìm ra câu lệnh sql nào đã được chạy với cơ sở dữ liệu kể từ một ngày nhất định để tôi có thể áp dụng chúng trong các môi trường khác nhau mà không phải nâng cấp từng môi trường không?

7
ContextSwitch

Câu trả lời đơn giản là không.

Câu trả lời mở rộng là mysql có thể ghi lại các truy vấn, tuy nhiên nó có giới hạn và nếu có một sự khác biệt giữa các môi trường thì nó sẽ dẫn đến các truy vấn đó không hoạt động. Ngay cả với cách duy nhất để làm điều đó là mặc dù chính máy chủ, vì theo như tôi biết thì không có ghi nhật ký đặc biệt nào được thêm vào JDatabase (Ngoài ra nếu một thành phần không sử dụng JDatabase thì điều khiển còn giảm hơn nữa).

Với những điều trên bạn có thể thấy trong một thế giới hoàn hảo, có một cách, tuy nhiên nếu bạn chuyển từ dev sang live, bạn hiện đang có một trang web trực tiếp thực hiện các truy vấn và nó "khác" sau đó là dev/staging hiện tại phiên bản. Vì vậy, nếu người dùng đăng ký trên trang web trực tiếp và bạn đã nâng cấp Joomla trong dev, thì bản cập nhật cho bảng người dùng sẽ thêm nhu cầu thêm lại người dùng đó theo cách thủ công (cũng có thể có thay đổi cấu trúc bảng). Bây giờ hãy tưởng tượng nó không phải là một người dùng, mà là 10, hoặc thậm chí 100, và quá trình này không thể được tự động hóa.

Joomla có một số tính năng cập nhật đẹp, cho phép phiên bản cập nhật mysql trên các bảng, điều này đảm bảo các bảng giữ cấu trúc mà các truy vấn cần, tuy nhiên nó không theo dõi bất kỳ chèn hoặc cập nhật nào trên bảng, vì vậy nếu bạn cập nhật trong môi trường dev , cách tốt nhất để cập nhật trong sản xuất là chỉ cần làm theo các bước tương tự và cập nhật trong sản xuất của bạn.

Trong tương lai, Joomla có thể theo dõi các thay đổi cơ sở dữ liệu trong lõi của nó, cho phép bạn đồng bộ hóa phiên bản sản xuất với phiên bản phát triển, tuy nhiên khối lượng công việc để xây dựng một thứ như thế là điên rồ và sẽ ảnh hưởng đến hiệu suất. Ngay bây giờ tôi không tin là có, hoặc nên có bất kỳ kế hoạch nào cho nó.

9
Jordan Ramstad

Cơ sở dữ liệu có xu hướng là một vấn đề lớn với tất cả sự phát triển phần mềm. Giữ mọi thứ được đồng bộ hóa là một nỗi đau lớn đối với chúng tôi, đặc biệt là với các trang web dàn dựng và sản xuất.

Một điều tôi đã bắt đầu xem xét gần đây nhưng chưa được thực hiện là:

http://phinx.org/

Một 'cách người nghèo' khác là xuất các lược đồ DB (nếu bạn quan tâm đến các lược đồ, dữ liệu có thể là một động vật khác) và sau đó chạy một khác biệt trên các lược đồ cho mỗi cơ sở dữ liệu. Nên tiết lộ sự khác biệt giữa khá dễ dàng. Sau đó, bạn chỉ cần hợp nhất dữ liệu để làm. Với điều đó tôi có xu hướng nói, lý tưởng nhất là bạn chỉ cần lo lắng về dữ liệu trên môi trường sản xuất của mình và giữ cho nó được đồng bộ hóa với môi trường dàn dựng. Sau đó, bạn có thể sandbox và chơi xung quanh trong phát triển khi cần thiết.

4
Chad Windnagle