Điểm:0

Chạy móc cập nhật sau khi cấu hình cụ thể đã được nhập?

lá cờ in

Tôi đang giới thiệu cấu hình mới cho một thực thể trong Drupal có thêm một vài trường boolean mới. Vấn đề là, mặc dù tôi đặt giá trị mặc định là TRUE trong giao diện người dùng, giá trị này chỉ dành cho các thực thể mới. Các thực thể hiện có sẽ không có giá trị hoặc sai khi được đánh giá trong mã.

Tôi muốn tạo kịch bản thay đổi trong đó sẽ mặc định tất cả các thực thể hiện có thành TRUE khi cấu hình được giới thiệu để tương thích ngược và chỉ chạy cấu hình đó một lần.

Các tập lệnh triển khai điển hình khuyên nên chạy updb trước khi cim với Drush. Điều này tạo ra xung đột khi cố gắng thực hiện điều này.

Ví dụ kịch bản triển khai Pantheon:

if (isset($_ENV['PANTHEON_ENVIRONMENT'])) {
  trạng thái $ = 0;
  $config_directory = dirname(__FILE__) . '/config/default';

  passthru("drush updb --yes", $status);
  passthru("drush cim --yes", $status);
  passthru("drush cim --yes", $status);
  passthru("drush cim --yes", $status);
  passthru("drush updb --yes", $status);
  passthru("drush cr", $status);

  nếu ($trạng thái == 0) {
    echo('Đã nhập cấu hình và cập nhật cơ sở dữ liệu.' ."\n");
  } khác {
    echo('Cấu hình chưa được nhập/cơ sở dữ liệu chưa được cập nhật. Lệnh Drush trả về lỗi.' . "\n");
  }
}

Có cách nào tốt hơn để thực hiện các thay đổi như thế này chỉ chạy một lần mà không khiến tập lệnh như ở trên bị lỗi không?

lá cờ cn
Tùy chọn duy nhất mà tôi gặp phải trong những trường hợp này là thêm các trường theo chương trình vào hook cập nhật, trước khi bạn đặt dữ liệu. Sau đó, việc nhập cấu hình cho các trường đó về cơ bản sẽ trở thành không hoạt động, nhưng điều đó có nghĩa là bạn không cần phải thay đổi cách triển khai của mình
lá cờ cn
Ngẫu nhiên thay, Pantheon dường như chạy `updb` và `cim` một...số lần thú vị. Thông thường, bạn sẽ chỉ thực hiện cả hai một lần như [drush does](https://www.drush.org/latest/deploycommand/)
Kevin avatar
lá cờ in
Đó là khuôn mẫu của những gì mọi người khuyên triển khai trong quá khứ - CIM đã cạn kiệt, updb được chạy trước cim, sau đó là cuối cùng 'trong trường hợp' các bản cập nhật khác được yêu cầu. Tôi cũng chưa bao giờ tìm thấy bất kỳ bản cập nhật bổ sung nào xung quanh quy trình đó, nhưng cho đến nay, nó đã khá chống đạn trên Pantheon và Acquia.
lá cờ cn
Không chắc điều đó thực sự có ý nghĩa - tất cả các bản cập nhật đều chạy lần đầu tiên hoặc bản dựng sẽ không thành công. Cách duy nhất để giới thiệu các bản cập nhật mới sau `updb` là thay đổi mã, tại thời điểm đó, đây là một triển khai mới và bạn quay lại `updb` đầu tiên một lần nữa. Nhưng đó không thực sự là những gì bạn đang hỏi về vì vậy tôi sẽ im lặng ngay bây giờ
Kevin avatar
lá cờ in
Nó có phải là một trường hợp cho điều này, có thể? https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Extension%21module.api.php/feft/hook_post_update_NAME/9.2.x
lá cờ cn
Móc đó vẫn chạy như một phần của `updb`, chỉ ở phần cuối. Bạn cần thay đổi cách triển khai và chạy cim trước hoặc giữ nguyên cách triển khai và tự tạo các trường trước. Tôi không nghĩ sẽ có một lựa chọn hợp lý khác, mặc dù điều này xảy ra với tôi đủ thường xuyên nên tôi rất vui khi biết về một giải pháp dễ dàng hơn
sonfd avatar
lá cờ in
lại nhận xét đầu tiên của @ clive, trước đây tôi đã sử dụng một cái gì đó như thế này để nhập cấu hình trong móc cập nhật để thực hiện loại việc này: https://www.metaltoad.com/blog/programmatically-importing-drupal- cấu hình 8 trường
Điểm:3
lá cờ ph

Bạn có thể sử dụng triển khai drush, thực hiện cập nhật theo thứ tự sau:

  1. Cập nhật móc từ module.install
  2. tôi
  3. cr
  4. Triển khai hook từ module.deploy.php

Vì vậy, việc chuyển đổi hook cập nhật của bạn thành hook triển khai có nghĩa là nó sẽ chạy sau khi nhập cấu hình.

lá cờ cn
Điều này có cùng một vấn đề với mã triển khai ban đầu của OP - cấu hình mới sẽ không được nhập trước khi móc cập nhật cố gắng sử dụng nó
Lambic avatar
lá cờ ph
Di chuyển móc cập nhật sang móc triển khai có nghĩa là nó sẽ chạy sau khi nhập
lá cờ cn
À vâng, tôi đã không nhận được lần đầu tiên đó. Có thể đáng đề cập đến nhu cầu thêm (ví dụ:) `passthru('drush deploy:hook', $status);` nếu OP muốn chạy tập lệnh của riêng họ thay vì `drush Deploy` trực tiếp

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.