Không bao gồm cấu hình từ nhập / xuất


16

Tôi nghĩ rằng đây là trường hợp sử dụng đơn giản của hệ thống quản lý Cấu hình mới, nhưng tôi không có may mắn tìm ra cách giải quyết vấn đề này:

Vấn đề

Tôi muốn lưu trữ cấu hình trong git và sử dụng drush để xuất cấu hình trong quá trình phát triển và sau đó triển khai nhập cấu hình. Khá giống với việc thực hiện một tính năng hoàn nguyên trong Drupal 7. Vấn đề của tôi là tôi không muốn lưu trữ mã truy cập trong git cho các tích hợp khác nhau. Điều này dẫn đến việc các cấu hình này bị xóa trên
$ drush cim -y

Tôi đã nhìn ở đâu

Tôi đã hy vọng sẽ có một danh sách / cấu hình đơn giản cho các cấu hình nên được loại trừ khi nhập / xuất. Có vẻ như đã có lúc nào đó nhưng nó phải được gỡ bỏ một lần nữa, vì nó có sẵn tại phiên bản Drupal 8 hiện tại.

Tôi đã xem xét cách thay đổi cấu hình đang được thực hiện so sánh kho lưu trữ đang hoạt động và đồng bộ hóa để xem liệu đó có phải là nơi tôi có thể xóa các thay đổi hay không, điều này dường như không phải là trường hợp. Tôi đã xem cách nhập khẩu cấu hình của drush vì nó có một số cấu hình không bao gồm cấu hình của chính nó, nhưng có vẻ như điều này không thể mở rộng được. Tôi đã xem xét ConfigEvents, nhưng tất cả những điều này dường như xảy ra sau khi nhập khẩu, vì vậy không có vẻ như điều này có thể được sử dụng.

Tôi có thiếu một cái gì đó không, hoặc không thể đơn giản loại trừ các cấu hình khỏi nhập / xuất?

Câu trả lời:


7

Không thể có loại trừ cụ thể, nhưng có một cái gì đó.

Giống như $ conf trong Drupal 7, có $ config trong settings.php mà bạn có thể sử dụng để ghi đè mọi thứ trong cấu hình cục bộ. Cấu trúc của nó $config['name.of.config']['nested']['key'].

Lưu ý rằng bất cứ điều gì được lưu trữ trong cấu hình vẫn nằm trong git, vì vậy bạn cần phải giữ không hoặc mã truy cập thử nghiệm của bạn trong git. Ngoài ra, giao diện người dùng sẽ hiển thị những gì thực sự được lưu trữ trong cấu hình và hiện sẽ không cung cấp bất kỳ dấu hiệu nào cho thấy nó bị ghi đè. Có những vấn đề đang chờ xử lý để cải thiện điều đó.

Tôi hiểu rằng điều này có những hạn chế nhưng ngay bây giờ, không thể tránh khỏi một cái gì đó ngoài cấu hình đã xuất. Theo như tôi biết.


Vì vậy, về cơ bản, bạn phải thiết lập / cập nhật cấu hình trong tệp settings.php của bạn thay vì sử dụng giao diện.
googletorp

Vâng, điều này không có gì mới. Không có gì thay đổi trong quy trình làm việc trong bối cảnh này trong d8.

11

Bạn có thể sử dụng mô-đun "Bỏ qua cấu hình": https://www.drupal.org/project/config_ignore

Bạn đã bao giờ trải nghiệm rằng cấu hình trang web của bạn bị ghi đè bởi cấu hình trên hệ thống tệp, khi thực hiện một cim drush chưa?

Không còn nữa!

Mô-đun này là một công cụ để cho phép bạn giữ cấu hình bạn muốn, đúng chỗ.


2
config_ignore có lẽ là ổn định nhất và giải pháp đơn giản hiện có, và giải pháp này có lẽ địa chỉ tốt nhất mong muốn của OP có "một danh sách / cấu hình đơn giản cho configs cần được loại trừ nhập khẩu / xuất khẩu"
bdanin

7

Bạn có thể sử dụng kết hợp config_ignoreconfig_split cho việc này.

Cấu hình bỏ qua cho phép bạn bỏ qua một tập hợp con của các thực thể cấu hình trong quá trình nhập (cũng ngăn chặn xóa kể từ khi phát hành 2.x). Thật không may, nó không ngăn chặn loại trừ cấu hình trong khi xuất.

Để loại trừ các thực thể cấu hình trong khi xuất, bạn có thể sử dụng config_split, tạo một thực thể config_split mới và để trống thư mục. Điều này ngăn cấu hình được xuất sang hệ thống tệp; thay vào đó, nó xuất nó trong cơ sở dữ liệu.

Tôi đã viết Loại trừ cấu hình từ quản lý cấu hình trong Drupal 8 về chủ đề này.


5

Để phân chia cấu hình, bạn có thể sử dụng https://www.drupal.org/project/config_split .

Nhập config_split cung cấp lệnh bảng điều khiển Drupal để nhập và xuất cấu hình được lọc. Tích hợp Drush có thể sẽ sớm xuất hiện (sau khi tất cả các bộ lọc được lấy cảm hứng từ bộ lọc --skip-mô-đun của drush).

Bạn có thể phân chia xuất khẩu thành các thư mục khác nhau mà sau đó bạn có thể bỏ qua.

Có một bài thuyết trình rất hay trong drupal con dublin 2016 bởi những người phụ trách sáng kiến ​​CMI mà tôi mong bạn hãy kiểm tra bất kể điều gì.


2

Tôi vừa kiểm tra @berdir trong câu trả lời số 1 và nó chạy hoàn hảo. Chỉ tôi thêm một lưu ý nhỏ: bạn phải đặt toàn bộ cấu hình trong var này, hoàn tất. Wihtout nó, $ config var không chạy chính xác.

Một cái gì đó như thế này:

 $config['language.negotiation'] = array(
  'session' => array(
    'parameter' => 'language',
  ),
  'url' => array(
    'source' => 'domain',
    'prefixes' => array(
      'es' => '',
      'pt-br' => '',
    ),
    'domains' => array(
      'es' => 'YourLocalDomain',
      'pt-br' => 'Anotherlocaldomain',
    ),
  ),
  'selected_langcode' => 'site_default',
  'langcode' => 'es',
);

Tài liệu: https://www.drupal.org/node/1928898

Lưu ý từ tài liệu trên: "Lưu ý rằng các giá trị được ghi đè qua $ config trong settings.php sẽ không thể xem được từ giao diện quản trị Drupal."


3
Bạn không cần phải làm điều này. Nó sẽ hợp nhất trong bất kỳ giá trị nào bạn xác định, nhưng có thể nó không hoạt động như mong đợi với một số cấu trúc.
Berdir

Ồ, tôi không thể chạy nó một cách chính xác. Tôi sẽ cố gắng gỡ lỗi nó một lần nữa và nếu không chạy chính xác, tôi có thể mở một lỗi trong d.org. Cảm ơn!
estoyausente

1
Tôi có thể xác nhận rằng bạn có thể làm một cái gì đó như$config['module.settings']['some']['value'] = 'foo';
googletorp

2

Tôi hơi thắc mắc tại sao bây giờ không ai nhắc đến các công cụ Drush CMI . Những lời kỳ diệu là drush cexyconfig-ignore.yml. Bạn sẽ có một danh sách bạn có thể điều chỉnh. Chúng tôi cần nó một lần để loại trừ các trường hợp khối đồng thời các cơ sở khối được xử lý.

Chúng tôi muốn xuất tất cả cấu hình, nhưng chúng tôi muốn loại trừ một số mẫu nhất định.

Đây là nơi --ignore-listtùy chọn drush cexyđến.

Trong dự án của chúng tôi, chúng tôi có một thư mục ./drush, vì vậy chúng tôi dán một tệp trong tệp có tên config-ign.yml với nội dung như sau.

ignore:
  - field.field.contact_message.*
  - field.storage.contact_message.*
  - contact.form.*
  - core.entity_form_display.contact_message*
  - core.entity_form_display.contact_form*
  - core.entity_view_display.contact_message*
  - core.entity_view_display.contact_form*
  - system.site
  - workbench_email.workbench_email_template.*

Vì vậy, bây giờ chúng tôi chạy drush cexynhư vậy

drush cexy --destination=/path/to/config-export --ignore-list=/path/to/drush/config-ignore.yml

Vì vậy, những gì nó làm là xuất cấu hình hoạt động, và sau đó áp dụng danh sách bỏ qua để loại bỏ cấu hình không mong muốn.

Vì vậy, bây giờ khi bạn chạy, git statusbạn sẽ chỉ thấy những thay đổi bạn muốn cam kết.

Nguồn: https://www.preinglynext.com.au/blog/int sinhing-drush-cmi-tools

Cài đặt

cd ~/.drush
wget https://raw.githubusercontent.com/previousnext/drush_cmi_tools/8.x-1.x/drush_cmi_tools.drush.inc
drush cc drush

Nguồn: https://github.com/preinglynext/drush_cmi_tools


1

Sử dụng cấu hình chia nhỏ (được khuyến nghị)

Các mô-đun phân chia cấu hình được thực hiện đặc biệt cho nhu cầu này.

Cấu hình tách được tích hợp với drush.

Chỉ sử dụng Drush

Drush cũng được cho là có thể làm điều đó bằng cách sử dụng --skip-modulescờ.

Bạn có thể thêm các dòng sau vào một drupal / drushrc.php trong webroot của dự án để thực hiện tự động.

$command_specific['config-export']['skip-modules'] = array('devel');
$command_specific['config-import']['skip-modules'] = array('devel');

Xem http://www.drush.org/en/master/config-exporting/#ignoring-development-modules

Đáng buồn là có một lỗi với chức năng này: https://github.com/drush-ops/drush/issues/1820 . Vì vậy, hiện tại bạn cũng cần thêm các tệp cấu hình đó vào .gitignore để các tệp cấu hình được xuất không được cam kết. Đây là một liên tục có lẽ từ bỏ chức năng (lỗi) này từ drush để ủng hộ phân tách cấu hình.


2
Bỏ qua các tập tin cấu hình trong git không hoạt động chính xác. Cấu hình không được xuất sẽ bị xóa. Ví dụ: các trang bảng tùy chỉnh sẽ bị xóa khi nhập cấu hình.
dobrzyns

@ user157272 ngay cả khi bạn nhập bằng cách sử dụng drush với ['config-import'] ['Skip-module']?
gagarine

drushrc.php thậm chí có thể được đặt bên ngoài webroot. Ví dụ: một cấp độ cao hơn, rất hữu ích khi bạn làm việc với Drupal trong thiết lập trình soạn thảo: github.com/drupal-composer/drupal-project .
leymannx

Điều này đã không làm việc cho tôi. Tôi đã thêm các mô-đun, nhưng chúng vẫn được thêm vào cấu hình bật / tắt mô-đun.
Jeremy John

Tôi đã cập nhật câu trả lời với cách thực hành tốt nhất hiện tại (config split)
gagarine
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.