2012-01-26 38 views
5

Thông tin cơ bản:Thiết lập môi trường Git. Lời khuyên cần thiết

  • Hiện tại chúng tôi là 3 người lập trình web (tốt, bạn bè thực tế, không có vấn đề ngờ vực).
  • Mỗi người lập trình SSH vào máy chủ Linux đơn lẻ, nơi mã nằm bên dưới tên người dùng của họ với quyền hạn sudo.
  • Chúng tôi đều sử dụng tác phẩm trên các tệp khác nhau cùng một lúc. Chúng tôi đặt câu hỏi "Bạn có trong tệp __ không?" đôi khi. Chúng tôi sử dụng Vim vì vậy chúng tôi biết nếu tập tin được mở hay không.
  • Mã phát triển của chúng tôi (chưa có sản xuất) nằm trong/var/www/
  • Repo từ xa của chúng tôi được lưu trữ trên bitbucket.
  • Tôi * rất * mới đối với Git. Tôi đã sử dụng subversion trước nhưng tôi đã được về cơ bản spoon-fed hướng dẫn và được cho biết chính xác những gì để gõ để đồng bộ lên mã và cam kết.
  • Tôi đọc khoảng một nửa số Git của Scott Chacon và đó là mức độ cho hầu hết kiến ​​thức Git của tôi.
  • Trong trường hợp quan trọng, chúng tôi chạy Ubuntu 11.04, Apache 2.2.17 và Git 1.7.4.1.

Vì vậy, Jan Hudec đã cho tôi một số lời khuyên trong câu hỏi trước. Anh ấy nói với tôi rằng thực hành tốt để thực hiện những việc sau:

  • Mỗi nhà phát triển có repo riêng trên máy tính cục bộ của họ.
  • Cho phép/var/www/là repo trên máy chủ. Đặt thư mục .git để cho phép 770.

Điều đó có nghĩa là mỗi máy tính của nhà phát triển cần có ngăn xếp LAMP (hoặc ít nhất là Apache, PHP, MySQL và Python được cài đặt).

Các mã chủ yếu là các tệp JavaScript và PHP nên không phải là vấn đề lớn khi sao chép nó. Tuy nhiên, làm cách nào để quản lý cơ sở dữ liệu cục bộ?

Trong trường hợp này, chúng tôi chỉ có hai bảng và sẽ đơn giản để tạo lại toàn bộ cơ sở dữ liệu cục bộ (ít nhất là để thử nghiệm). Nhưng trong tương lai khi cơ sở dữ liệu quá lớn, chúng ta có nên đăng nhập từ xa vào cơ sở dữ liệu MySQL trên máy chủ hay chúng ta chỉ cần có dữ liệu mẫu để phát triển và thử nghiệm?

+0

có bạn coi là có sao chép một chiều từ sản xuất đến cơ sở dữ liệu dev? Hai bản sao, một trong số đó ghi đè lên một bản sao khác một cách thường xuyên? Sau đó, bạn kết nối với bản sao dev, và không có gì bạn làm ở đó sẽ "dính" lâu. – Borealid

+0

Chỉ cần làm rõ, điều này dường như không liên quan gì đến git, nhưng với việc thay đổi phong cách phát triển của bạn từ "mọi người làm việc trên một môi trường thử nghiệm" để "mọi người đều có môi trường thử nghiệm riêng". Câu hỏi cụ thể của bạn là về việc phải làm gì với cơ sở dữ liệu thử nghiệm. Tôi có đúng không? – Schwern

+0

@Borealid Tôi tự hỏi nếu nó có thể làm một chiều * sao chép một phần *, loại giống như làm một tuyên bố chọn với một giới hạn 50 hoặc một cái gì đó. Bằng cách đó chúng tôi có thể giữ cho cơ sở dữ liệu cục bộ đủ nhỏ và cũng có thể thêm dữ liệu ngẫu nhiên tùy chỉnh của riêng mình. – hobbes3

Trả lời

4

gì bạn đang làm là chuyển từ "tất cả mọi người làm việc với nhau trong một môi trường" thành "tất cả mọi người có môi trường phát triển riêng của họ". Lợi ích chính là mọi người sẽ không bước chân vào nhau.

lợi ích khác bao gồm một môi trường phát triển không đồng nhất, có nghĩa là nếu tất cả mọi người được phát triển trên cùng một máy phần mềm sẽ trở nên phụ thuộc vào đó một thiết lập bởi vì các nhà phát triển là lười biếng. Nếu mọi người phát triển trong các môi trường khác nhau, thậm chí chỉ với các phiên bản hơi khác nhau của cùng một công cụ, họ sẽ buộc phải viết mã mạnh mẽ hơn để đối phó với điều đó.

Hạn chế chính, như bạn đã nhận thấy, việc thiết lập môi trường khó hơn. Đặc biệt, đảm bảo cơ sở dữ liệu hoạt động.

Trước tiên, mỗi nhà phát triển phải có cơ sở dữ liệu riêng. Điều này không có nghĩa là tất cả chúng phải có cơ sở dữ liệu riêng của mình server (mặc dù nó tốt cho các mục đích không đồng nhất) nhưng chúng phải có cá thể cơ sở dữ liệu riêng mà chúng kiểm soát.

Thứ hai, bạn nên có lược đồ và không chỉ bất kỳ thứ gì trong cơ sở dữ liệu. Nó phải nằm trong một tệp được kiểm soát phiên bản.

Thứ ba, thiết lập cơ sở dữ liệu mới sẽ tự động. Điều này cho phép các nhà phát triển thiết lập một cơ sở dữ liệu sạch sẽ mà không gặp rắc rối nào.

Thứ tư, bạn sẽ cần nhận dữ liệu thử nghiệm thú vị vào cơ sở dữ liệu đó. Đây là nơi mọi thứ trở nên thú vị ...

Bạn có một số tuyến đường để thực hiện điều đó.

Đầu tiên là làm cho một bãi chứa của một cơ sở dữ liệu hiện có, trong đó có dữ liệu thực tế, vệ sinh của khóa học. Điều này rất dễ dàng, và cung cấp dữ liệu thực tế, nhưng nó rất dễ vỡ. Các nhà phát triển sẽ phải săn lùng xung quanh để tìm dữ liệu thú vị để thực hiện thử nghiệm của họ. Dữ liệu đó có thể thay đổi trong bãi chứa tiếp theo, phá vỡ các thử nghiệm của họ. Hoặc nó chỉ có thể không tồn tại chút nào.

Thứ hai là viết "đồ đạc thử nghiệm". Về cơ bản, mỗi thử nghiệm điền vào cơ sở dữ liệu với dữ liệu thử nghiệm mà nó cần. Điều này có lợi cho phép nhà phát triển lấy chính xác dữ liệu họ muốn và biết chính xác trạng thái của cơ sở dữ liệu. Những hạn chế là nó có thể tốn rất nhiều thời gian, và thường dữ liệu là quá sạch. Dữ liệu sẽ không chứa tất cả các dữ liệu thực sự có thể gây ra lỗi thực.

Thứ ba là không truy cập vào cơ sở dữ liệu ở tất cả và thay vào đó "giả" tất cả các cuộc gọi cơ sở dữ liệu. Bạn lừa tất cả các phương thức thường truy vấn cơ sở dữ liệu vào thay vì trả về dữ liệu thử nghiệm. Điều này giống như viết đồ đạc thử nghiệm, và có hầu hết các nhược điểm và lợi ích tương tự, nhưng nó FAR xâm lấn hơn. Sẽ rất khó để làm trừ khi hệ thống của bạn được thiết kế để thực hiện nó. Nó cũng không bao giờ thực sự kiểm tra nếu các cuộc gọi cơ sở dữ liệu của bạn hoạt động.

Cuối cùng, bạn có thể xây dựng một tập hợp các thư viện mà tạo dữ liệu bán ngẫu nhiên cho bạn. Tôi gọi đây là "Kỹ thuật Sims" sau trò chơi điện tử nơi bạn tạo ra những gia đình giả mạo, tra tấn họ và sau đó vứt chúng đi. Ví dụ: giả sử bạn có đối tượng Người dùng cần tên, tuổi, đối tượng Thanh toán và đối tượng Phiên. Để kiểm tra Người dùng, bạn có thể muốn người dùng có tên, tuổi, khả năng thanh toán và trạng thái đăng nhập khác nhau. Để kiểm soát tất cả những gì bạn cần để tạo dữ liệu thử nghiệm cho tên, độ tuổi, Thanh toán và Phiên. Vì vậy, bạn viết một hàm để tạo tên và một để tạo ra các độ tuổi. Đây có thể là đơn giản như chọn ngẫu nhiên từ một danh sách. Sau đó, bạn viết một để làm cho bạn một đối tượng thanh toán và một đối tượng Session. Theo mặc định, tất cả các thuộc tính sẽ là ngẫu nhiên, nhưng hợp lệ ... trừ khi bạn chỉ định khác. Ví dụ...

# Generate a random login session, but guarantee that it's logged in. 
session = Session.sim(logged_in = true) 

Sau đó, bạn có thể sử dụng điều này để kết hợp một Người dùng thú vị.

# A user who is logged in but has an invalid Visa card 
# Their name and age will be random but valid 
user = User.sim(
    session = Session.sim(logged_in = true), 
    payment = Payment.sim(invalid = true, type = "Visa"), 
); 

Điều này có tất cả các ưu điểm của thiết bị thử nghiệm, nhưng vì một số dữ liệu không thể đoán trước nên có một số lợi thế của dữ liệu thực. Thêm dữ liệu "thú vị" vào các chức năng rand và rand mặc định của bạn sẽ có tác động khác nhau. Ví dụ: thêm tên Unicode vào random_name có thể sẽ phát hiện tất cả các loại lỗi thú vị! Thật không may là tốn kém và tốn thời gian để xây dựng.

Có bạn có nó. Thật không may là không có câu trả lời dễ dàng cho vấn đề cơ sở dữ liệu, nhưng tôi yêu cầu bạn không chỉ đơn giản là sao chép cơ sở dữ liệu sản xuất vì nó là một đề xuất mất đi trong thời gian dài. Bạn sẽ có khả năng làm một lai của tất cả các lựa chọn: sao chép, đồ đạc, chế giễu, dữ liệu bán ngẫu nhiên.

1

Một vài lựa chọn, theo thứ tự tăng độ phức tạp:

  • Tất cả các bạn kết nối với các bậc thầy sống DB, đọc/ghi cho phép. Điều này là nguy hiểm, nhưng tôi đoán bạn đã làm nó. Hãy chắc chắn rằng bạn đã sao lưu!
  • Sử dụng đồ đạc thử nghiệm để điền một DB thử nghiệm cục bộ và chỉ sử dụng nó. Bạn không chắc chắn những công cụ có gì cho điều này trong thế giới PHP.
  • Sao chép (mysqldump) cơ sở dữ liệu chính và nhập nó vào các cá thể MySQL của máy cục bộ của bạn, sau đó thiết lập môi trường dev của bạn để kết nối với MySQL cục bộ của bạn. Lặp lại kết xuất/nhập khi cần thiết
  • Thiết lập sao chép một chiều từ bản gốc đến phiên bản cục bộ của bạn.

Tùy chọn, thiết lập người dùng chỉ đọc trên DB chính và định cấu hình ứng dụng để cho phép bạn chuyển sang kết nối chỉ đọc với DB thực trong trường hợp bạn không thể đợi bản sao tiếp theo của dữ liệu chính.

0
  1. riêng repo không nghĩa riêng máy chủ Staging (config này khó duy trì và vô cùng xấu quy mô để 10-20-100 nhà phát triển)
  2. Đó là luôn luôn tốt hơn để có càng sớm càng hệ thống xây dựng tự động (bán tự động), chuyển đổi dữ liệu nguồn được lưu trữ thành hệ thống sống (ít thủ công hơn - ít thay đổi hơn để tạo ra các lỗi không phải mã) và (có thể) một số kiểu tích hợp Continuos (kiểm tra thường xuyên, tìm lỗi nhanh). Đối với xây dựng hệ thống (DB-phần) bạn chỉ có để chuẩn bị dữ liệu ban đầu (cấu trúc bảng, dữ liệu bãi) như các văn bản (phiên bản), đó là

    • dễ dàng có thể trộn giữa hòa trộn
    • xử lý và xử lý và chuyển đổi đến đối tượng sử dụng cuối cùng của mã, không bằng tay - không có lỗi của con người, nhiễu không của hoạt động
Các vấn đề liên quan