Làm cách nào để di chuyển nội dung khối từ nhà phát triển sang trang sản xuất?


24

Cuối cùng tôi đã bắt đầu nhìn vào Drupal 8 một cách nghiêm túc và tôi đặc biệt quan tâm đến việc quản lý cấu hình. Tôi đã bắt gặp một cái gì đó có thể có một chút vấn đề và đó là về nội dung khối tùy chỉnh.

Tôi có thể thấy rằng hệ thống quản lý cấu hình có thể xuất cấu hình khối - khu vực, chủ đề, trọng lượng, khả năng hiển thị, v.v. Tuy nhiên, nội dung khối thực tế không xuất hiện trong quá trình xuất cấu hình, điều này hợp lý và dễ hiểu.

Khi nhập cấu hình khối đó vào một trang sản xuất, điều dường như xảy ra là cấu hình khối được tạo và thông báo giữ được đặt đúng chỗ, báo cáo khối bị hỏng hoặc bị thiếu. Rõ ràng nội dung khối không tồn tại trên máy chủ sản xuất.

Làm thế nào các khối tùy chỉnh có thể được di chuyển từ máy chủ dev / staging sang máy chủ sản xuất? Tôi nhận ra rằng các khối trong Drupal 8 là các thực thể có thể thực hiện được như các nút và do đó sẽ cần phải được di chuyển theo cùng một cách và tôi hiểu rằng có một API di chuyển trong Drupal 8 nhưng điều này dường như được xây dựng để di chuyển nội dung từ các trang web Drupal 6 và 7 Drupal 8 trái ngược với Drupal 8 đến Drupal 8 trang web.

Vấn đề này đặc biệt liên quan đến các khối tùy chỉnh vì các khối được tạo bởi các mô-đun khác như Chế độ xem rõ ràng sẽ di chuyển qua dưới dạng cấu hình.

blocks  8 

Có một số giải pháp dàn dựng nội dung trong các tác phẩm bao gồm mô-đun triển khai và entitypilot.com (từ chối trách nhiệm, đó là sản phẩm của tôi)
larowlan

1
Tương tự: Lỗi khối trên CMI
kenorb

Câu trả lời:


7

Một câu trả lời khác mà tôi chưa thấy được đề cập ở đây là sử dụng mô-đun Khối đơn giản , khá giống với thiết lập 'Khối tùy chỉnh' của lõi, nhưng thay vì có một nội dung hỗn hợp kỳ lạ + config, bạn có tất cả các cài đặt và nội dung Khối được lưu trữ trong cấu hình, có thể được xuất và nhập sạch.

Xem, để thảo luận thêm trong lõi 8 Drupal: Các khối tùy chỉnh không thể được xuất và nhập chính xác .


3

Tôi vừa xuất bản một mô-đun đóng góp giải quyết điều này. Về cơ bản, mô-đun cung cấp một loại khối dựa trên cấu hình (khối cố định) bao bọc một khối tùy chỉnh (khối nội dung). Nếu khối nội dung không tồn tại, nó được tạo với nội dung mặc định hoặc trống nếu không có nội dung mặc định nào được đặt. Mọi thứ đều được thực hiện thông qua UI, không cần tập tin đặc biệt hoặc mô-đun tùy chỉnh.

Tôi đặt tên cho nó là nội dung khối cố định và nó được xuất bản tại:

https://www.drupal.org/project/fixed_block_content


1

Một cách tiếp cận khác để giữ nội dung được thêm vào như một phần của sự phát triển cũng được thúc đẩy là sử dụng mô-đun Nội dung mặc định để xuất nội dung. Nó được xây dựng để nội dung được xuất sang thư mục 'nội dung' của cấu hình cài đặt và sau đó mô-đun, nếu được bật, sẽ tự động đưa nội dung vào khi trang web được cài đặt, nhưng cũng có thể nhập từng mục một nội dung , chẳng hạn như trong một bản cập nhật, với đoạn mã dưới đây trong example.install hoặc example.profile:

<?php
/**
* Import a piece of content exported by default content module.
*/
function example_import_default_content($path_to_content_json) {
  list($entity_type_id, $filename) = explode('/', $path_to_content_json);
  $p = drupal_get_path('profile', 'guts');
  $encoded_content = file_get_contents($p . '/content/' . $path_to_content_json);
  $serializer = \Drupal::service('serializer');
  $content = $serializer->decode($encoded_content, 'hal_json');
  global $base_url;
  $url = $base_url . base_path();
  $content['_links']['type']['href'] = str_replace('http://drupal.org/', $url, $content['_links']['type']['href']);
  $contents = $serializer->encode($content, 'hal_json');
  $class = 'Drupal\\' . $entity_type_id . '\Entity\\' . str_replace(' ', '', ucwords(str_replace('_', ' ', $entity_type_id)));
  $entity = $serializer->deserialize($contents, $class, 'hal_json', array('request_method' => 'POST'));
  $entity->enforceIsNew(TRUE);
  $entity->save();
}

Xuất một khối tùy chỉnh với ID là 8:

drush dcer block_content 8

(Nếu bạn không đặt đường dẫn hồ sơ của mình trong cài đặt Drush, bạn sẽ phải chỉ định nó ở trên.)

Và sử dụng xuất kết quả trong tệp example.install của bạn như thế này:

<?php
/**
* Add the footer block content.
*
* Implements hook_update_N().
*/
function example_update_8001() {
  example_import_default_content('block_content/136efd63-021e-42ea-8202-8b97305cc07f.json');
}

http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf


0

Tôi không chắc chắn tôi thấy bất kỳ lợi thế mạnh mẽ nào của việc đồng bộ cấu hình khối giữa nhiều môi trường vì các khối được đan xen với nội dung.

Lý do cho điều này là có một khối mới được tạo từ các tệp yml không có tiêu đề / nội dung (nội dung) và do đó đưa ra thông báo 'bị hỏng / mất tích'.

Bạn có thể thử tạo UUID (nếu bạn muốn tạo khối ở cả hai vị trí - đảm bảo tên máy khớp với ...) trong bảng block_content phát triển của bạn khớp với những gì bạn có trong sản xuất (các mối quan hệ khác dường như sử dụng thực thể ID). Sau đó, khi bạn thực hiện đồng bộ hóa cấu hình, bạn có thể thấy 'Xem sự khác biệt' trong các tệp yml và có thể thấy những gì khác bạn cần thay đổi trên dev để làm cho nó phù hợp với uuids sản xuất, v.v. Tôi đã làm việc này, nhưng vẫn tìm ra Dễ dàng nhất để bỏ qua tất cả các cấu hình khối của bạn trong mã trừ khi bạn thực hiện quy trình này hoặc tự tạo một số loại đồng bộ hóa khối cơ sở dữ liệu bằng cách sử dụng block_content, block_content__body và block_content_field_data.

Nó không thanh lịch lắm nhưng có thể cho phép bạn giữ cấu hình khối của mình trong mã. Mặt khác, nếu bạn tiếp tục triển khai các khối với cấu hình, chúng sẽ luôn bị 'hỏng hoặc mất tích'.

Một bài đăng trên blog khác đề nghị tạo một khối tùy chỉnh trong môi trường trực tiếp nhưng không đặt nó. Sau khi đồng bộ hóa cơ sở dữ liệu với dev, khối tùy chỉnh có thể được định cấu hình, cấu hình được xuất và vì nó đã tồn tại trong nhập trực tiếp vị trí.


0

Có cùng một vấn đề và không thực sự là một giải pháp, chỉ bổ sung: Trong quá trình phát triển hợp tác, chúng tôi đang sử dụng một máy chủ dàn dựng lấy từ kho lưu trữ và đặt lại tất cả cấu hình. Điều này có nghĩa là cấu hình khối đang được đặt lại tự động, bạn chỉ đơn giản là không thể đặt các khối bạn coi là "nội dung" trực tiếp trên máy chủ đó.

Thật dễ dàng để sử dụng đồng bộ hóa cấu hình xuất khẩu drush trong khi biết chính xác những gì bạn đã làm và chắc chắn rằng mọi thay đổi cấu hình đều có nghĩa là để triển khai. Nhưng Drupal quyết định cho chúng tôi rằng các khối là cấu hình (trong khi rõ ràng nội dung khối được xử lý như nội dung). Vì vậy, điều này dường như bị phá vỡ bởi thiết kế.

Trong thời gian nhất định, tôi nghĩ rằng giải pháp thiết thực nhất là thêm các tệp yml liên quan đến khối vào .gitignore.


1
Cấu hình Bỏ qua có khả năng tốt hơn .gitignore: drupal.org/project/config_ignore
bdanin

0

Tuy nhiên, tôi cũng không chắc chắn, nếu bạn không tìm thấy bất kỳ giải pháp nào, bạn có thể xem mô-đun này https://www.drupal.org/project/deploy . Nói thật, tôi không nhớ có thể triển khai các khối đẩy từ DEV sang SẢN XUẤT hay không.


0

Tôi nghĩ rằng cách tốt nhất để xử lý việc này sẽ là:

Đây là những gì tôi thường thấy mọi người sử dụng và cá nhân tôi sử dụng. Nhưng nó đồng bộ toàn bộ cơ sở dữ liệu so với chỉ nội dung khối.


Điều đó có thể hoạt động nếu không có vấn đề với cơ sở dữ liệu ghi đè. Bây giờ, nếu mong muốn duy nhất là di chuyển một khối tùy chỉnh mới vào cơ sở dữ liệu hiện có, phương pháp này sẽ khó thực hiện.
karolus

Câu trả lời này có vị trí của nó, trên lý thuyết. Nhưng trong thực tế, đây không phải là một giải pháp tốt, đặc biệt nếu dự án đang sử dụng phân tách cấu hình hoặc có bất kỳ cấu hình khác nhau giữa các môi trường (rất có thể).
komlenic

0

Vui lòng sử dụng mô-đun Cấu trúc đồng bộ .

Đồng bộ cấu trúc cung cấp các lệnh Drush và màn hình giao diện quản trị để đồng bộ hóa nội dung cũng có thể được coi là cấu hình. Bao gồm các mục menu, khối tùy chỉnh và các điều khoản phân loại.

Các bước:

  1. Đi đến cấu trúc đồng bộ.
  2. Chuyển đến tab Blocks.
  3. Xuất khẩu.
  4. Cấu hình và nội dung của bạn sẽ được xuất trong thư mục cấu hình.
  5. Mang cấu hình đến các trang web khác & Nhập khẩu.
  6. Đi đến cấu trúc đồng bộ và nhấp vào nhập.
  7. Làm xong
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.