2008-11-26 32 views
6

Tôi có dịp để sản xuất các trang web Drupal bằng cách sử dụng môi trường phát triển, dàn dựng và sản xuất. Giữ mã đồng bộ giữa các trang web là một nhiệm vụ đơn giản bằng cách sử dụng subversion. Cái gì không đơn giản như vậy là truyền các thay đổi tới dữ liệu của cơ sở dữ liệu (không chỉ lược đồ) giữa các bản cài đặt.Làm cách nào để giữ dữ liệu đồng bộ trong khi triển khai?

Lý do cho việc này sẽ quen thuộc với bất kỳ nhà phát triển Drupal nào. Drupal lưu trữ một số cài đặt cấu hình nhất định trong cơ sở dữ liệu, cụ thể liên quan đến các trường CCK, Chế độ xem và các mô-đun khác cho phép mọi thứ được đặt động bằng giao diện quản trị. Đơn giản việc đồng bộ hóa lược đồ là không đủ - thông tin cần thiết cũng có trong dữ liệu. Những gì tôi đang tìm là một cách để đồng bộ hóa những thay đổi cơ sở dữ liệu để nếu một nhà phát triển thay đổi trường CCK trên máy chủ dàn dựng, chúng có thể được truyền xuống môi trường phát triển cục bộ để có thêm công việc và cuối cùng là môi trường sản xuất.

Có công cụ nào sẽ thực hiện việc này không? Quy trình của bạn để xử lý một hoặc nhiều nhà phát triển trên một dự án như thế này là gì?

+0

thể trùng lặp của [Drupal Chiến lược kiểm soát nguồn?] (Http://stackoverflow.com/questions/282858/drupal-source-control-strategy) – gnat

+0

Xem [câu trả lời trước cho câu hỏi này] (http://stackoverflow.com/questions/282858/drupal-source-control-strategy) – Eli

Trả lời

2

Xung quanh đây, chúng tôi đã xuống hạng khá nhiều CCK để sử dụng cho các kiểu nút nguyên mẫu và v.simple. Nó không có giá trị đau đầu của cố gắng để tách 'cấu hình' từ 'nội dung' trong cơ sở dữ liệu. Có tất cả các cách để bạn có thể cố gắng giữ mọi thứ đồng bộ nhưng, trong ngắn hạn, trừ khi nó nằm trong một tệp hoặc cung cấp cho bạn tùy chọn để xuất sang một tệp, bạn sẽ bị tổn thương. (Như một phần thưởng bổ sung, việc xuất các chế độ xem của bạn sang một tệp sẽ nhanh hơn một chút so với kéo nó ra khỏi DB mỗi khi được sử dụng.)

Bạn đề cập đến Dev, Staging & Máy chủ trực tiếp - nếu bạn có lập trình viên những thay đổi không có giấy tờ trong Dàn dựng, bạn đã bị thay đổi. Nếu bạn có Staging thường xuyên được đồng bộ hóa với Live &, hãy thực hiện các thay đổi được thực hiện cho Staging là những thứ đã được thực hiện trong Dev & đang được kiểm tra trước khi chuyển sang Live, bạn có thể thành công hơn.

5

Để đồng bộ hóa dữ liệu cơ bản: Tôi sử dụng mysqldump để đổ tất cả dữ liệu vào tệp .sql trên cơ sở hàng đêm. Kịch bản sau đó kiểm tra nó trong hệ thống kiểm soát phiên bản. Điều này được cronned trong một kịch bản bash đơn giản nhưng bạn có thể làm một cái gì đó tương tự trên hầu như bất kỳ nền tảng ...

Tôi chỉ cần đọc thêm một chút và tôi không chắc chắn nếu phương pháp của tôi sẽ giúp đỡ. Tôi chưa bao giờ phải hợp nhất một kết xuất SQL nên tôi không thể nhận xét về cách nó được quản lý hiệu quả như thế nào.

Mặc dù bạn có thể đẩy các thay đổi ra (lược đồ, dữ liệu mới) đến máy chủ dàn dựng/sản xuất, bạn có thể gặp rắc rối hơn khi kéo các thay đổi trở lại vào dev. Như tôi nói - việc sáp nhập có thể hoặc không thể thực hiện được. Tôi chỉ không biết.

+0

Bạn đã thực sự sử dụng mysqldump cho dev-> staging-> production trên bản cài đặt Drupal chưa? Nó thực sự cố gắng khắc phục nội dung và cấu hình với nhau trong cơ sở dữ liệu, làm cho nó hầu như không thể sử dụng các bãi cơ sở dữ liệu theo cách này ... Nếu bạn đã quản lý điều này trên Drupal thì tôi sẽ quan tâm đến cách bạn đã làm nó:) –

0

Sử dụng hệ thống phiên bản cơ sở dữ liệu. Đối với điều này, bạn cần một bảng VersionInfo trong cơ sở dữ liệu và tất cả các truy vấn ddl và dml sql của bạn theo định dạng xml cùng với thông tin phiên bản. Bây giờ bạn chỉ có một công cụ .net đơn giản sẽ kiểm tra bảng VersionInfo và chạy tất cả các truy vấn từ xml được thêm vào sau phiên bản đó và cập nhật phiên bản hiện tại trong versionInfo.

1

Tôi đã cố gắng trả lời cách tôi thực hiện việc này trong một câu hỏi khác. Tôi sẽ đăng nó ở đây cũng

Tôi nghĩ rằng một chiến lược tốt ở đây là sử dụng API hồ sơ cài đặt. Với API hồ sơ cài đặt, bạn có thể thực hiện hầu hết mọi thứ bằng cách sử dụng công cụ quản trị Drupal. Hầu hết các biểu mẫu lõi chỉ đơn giản là thiết lập các biến trong bảng biến. Để có thể hiển thị một cách hợp lý nội dung cơ sở dữ liệu không nội dung của bạn, tức là cấu hình là khôn ngoan để sử dụng các chức năng cập nhật.

Trên trang web của mình, chúng tôi có trên mô-đun "ec", rất ít ngoài việc tệp ec.install chứa các hàm cập nhật, ví dụ: ec_update_6001()

Chức năng cài đặt chính của bạn có thể thực sự quan tâm đến việc cập nhật mọi cài đặt mới mà bạn thực hiện để cập nhật mô-đun của mình.

function ec_install() { 
    $ret = array(); 
    $num = 0; 
    while (1) { 
    $version = 6000 + $num; 
    $funcname = 'ec_update_' . $version; 
    if (function_exists($funcname)) { 
    $ret[] = $funcname(); 
    $num++; 
    } else { 
    break; 
    } 
    } 
return $ret; 
} 

Một chức năng cập nhật mẫu hoặc hai từ tập tin thực tế của chúng tôi bây giờ làm theo

// Create editor role and set permissions for comment module 
function ec_update_6000() { 
    install_include(array('user')); 
    $editor_rid = install_add_role('editor'); 
    install_add_permissions(DRUPAL_ANONYMOUS_RID, array('access comments')); 
    install_add_permissions(DRUPAL_AUTHENTICATED_RID, array('access comments', 'post comments', 'post comments without approval')); 
    install_add_permissions($editor_rid, array('administer comments', 'administer nodes')); 
    return array(); 
} 
// Enable the pirc theme. 
function ec_update_6001() { 
    install_include(array('system')); 
    // TODO: line below is not working due to a bug in Install Profile API. See http://drupal.org/node/316789. 
    install_enable_theme('pirc'); 
    return array(); 
} 

// Add the content types for article and mtblog 
function ec_update_6002() { 
    install_include(array('node')); 
    $props = array(
    'description' => 'Historical Movable Type blog entries', 
); 
    install_create_content_type('mtblog', 'MT Blog entry', $props); 
    $props = array(
    'description' => 'Article', 
); 
install_create_content_type('article', 'Article', $props); 
return array(); 
} 

hiệu quả này chủ yếu là giải quyết vấn đề phiên bản với cơ sở dữ liệu và mã Drupal. Chúng tôi sử dụng nó rộng rãi. Nó cho phép chúng tôi quảng bá mã mới thay đổi cấu hình cơ sở dữ liệu mà không cần phải nhập lại cơ sở dữ liệu hoặc thực hiện thay đổi trực tiếp. Điều này cũng có nghĩa là chúng tôi có thể kiểm tra phiên bản đúng cách mà không sợ thay đổi cơ sở dữ liệu ẩn.

Cuối cùng, lượt xem và lượt xem hỗ trợ phương pháp này. Xem đoạn mã này

// Enable CCK modules, add CCK types for Articles in prep for first stage of migration, 
// enable body for article, enable migration modules. 
function ec_update_6023() { 
    $ret = array(); 
    drupal_install_modules(array('content', 'content_copy', 'text', 'number', 'optionwidgets')); 
    install_include(array('content', 'content_copy')); 
    install_content_copy_import_from_file(drupal_get_path('module', 'ec') . '/' . 'article.type', 'article'); 
    $sql = "UPDATE {node_type} SET body_label='Body', has_body=1 
    WHERE type = 'article'"; 
    $ret[] = update_sql($sql); 
    return $ret; 
} 
Các vấn đề liên quan