Không thể cài đặt đã tồn tại trong cấu hình hoạt động


15

Trên Drupal 8.1, tôi tiếp tục chạy trong các loại tin nhắn đó khi tôi cố gắng kích hoạt một mô-đun tùy chỉnh hoặc một tính năng tùy chỉnh để thực hiện một số sửa đổi cho trang cơ bản. (thêm các trường).

Nó thực sự gây phiền nhiễu ...

Các bước:

  • Xóa toàn bộ cơ sở dữ liệu
  • đi tới /install.php và chọn Hồ sơ tiêu chuẩn
  • Bây giờ trang web đang chạy, hãy mở rộng
  • Chọn tính năng - Trang cơ bản

Kết quả:

Unable to install Feature - Basic Page, core.base_field_override.node.page.promote, core.entity_form_display.node.page.default, core.entity_view_display.node.page.default, core.entity_view_display.node.page.teaser, field.field.node.page.body, node.type.page already exist in active configuration.

Vâng vâng ... đó là những gì tôi muốn làm: Thay đổi các cài đặt mặc định đó!

Bối cảnh:

Có thể cài đặt tính năng của tôi để thực hiện một số sửa đổi cho trang cơ bản.

Tính năng của tôi

Đây là tính năng tạo của tôi với mô-đun Tính năng

Về cơ bản, nó thêm hai trường, banner_image và background_image vào trang cơ bản

Các tập tin:

config
    install
        core.base_field_override.node.page.changed.yml
        core.base_field_override.node.page.created.yml
        core.base_field_override.node.page.promote.yml
        core.base_field_override.node.page.status.yml
        core.base_field_override.node.page.sticky.yml
        core.base_field_override.node.page.title.yml
        core.base_field_override.node.page.uid.yml
        core.entity_form_display.node.page.default.yml
        core.entity_view_display.node.page.default.yml
        core.entity_view_display.node.page.teaser.yml
        field.field.node.page.body.yml
        field.field.node.page.field_banner_image.yml
        field.field.node.page.field_image.yml
        field.storage.node.field_banner_image.yml
        language.content_settings.node.page.yml
        node.type.page.yml
feature_basic_page.features.yml
feature_basic_page.info.yml

Tại sao điều đơn giản này không được hỗ trợ? Có phải là một lỗi? Tôi nên làm gì để có thể sử dụng tính năng của mình?


1
Sử dụng mô-đun EasyInstall của drupal được sử dụng để xóa cấu hình hoạt động
Karthikeyan Manivasagam

1
+1 mô-đun thú vị - đáng xem - cảm ơn bạn @KarthikeyanManivasagam
trị liệu

Câu trả lời:


24

Với drush có lẽ bạn có thể làm

drush config-delete module_name.settings

để xóa các cấu hình khiếu nại


Tôi cũng phát hiện ra trong trận chiến hoành tráng của mình chống lại Drupal rằng bạn có thể di chuyển các cấu hình đó trong một optional/thư mục để làm cho nó im lặng. Nhưng tôi không chắc về tất cả các hàm ý ...
Guillaume Bois

@GuillaumeBois: các hàm ý là các cấu hình tùy chọn này sẽ bị bỏ qua nếu đã được cài đặt hoặc nếu phụ thuộc không được đáp ứng. Vì vậy, nó có thể dẫn đến các vấn đề xa hơn nếu cấu hình là cần thiết để mô-đun hoạt động.
Renrhaf

1 cảm ơn bạn @GiorgosK (Part 1 of 2): Tôi tìm thấy giải pháp này để làm việc trong trường hợp của tôi: Tôi có lỗi này hiển thị trong trình duyệt web cho trang web dev của tôi: Warning: in_array() expects parameter 2 to be array, null given in lightning_layout_block_alter() (line 91 of modules/contrib/lightning_layout/lightning_layout.module).sau khi thiết lập nguồn git mã trang web của tôi và cơ sở dữ liệu trên máy khác .
trị liệu

(Phần 2 trên 2) Vì vậy, để giải quyết nó, tôi đã cố gắng gỡ cài đặt sét_layout và cài đặt lại. drush pm-uninstall lightning_layoutđã hoạt động nhưng sau đó khi tôi cố cài đặt lại thì drush en lightning_layouttôi đã gặp lỗi dòng lệnh này "Trong dòng PreEx hiệnConfigException.php 65: Các đối tượng cấu hình (field.st Storage.node.panelizer) được cung cấp bởi sét_layout đã tồn tại trong cấu hình hoạt động" Vì vậy, tôi đã sử dụng giải pháp như vậy: drush config-delete field.storage.node.panelizer và sau đó có thể kích hoạt lại mô-đun:drush en lightning_layout
trị liệu vào

1
nếu bạn không chắc chắn mình phải xóa "cài đặt" nào, bạn nên chạy "drush config-list" để có được tên chính xác của cấu hình
Jorge

3

Điều này không được hỗ trợ vì một mô-đun có thể không thay thế một thực thể cấu hình đã tồn tại với cài đặt cấu hình.

Để thêm các cấu hình chế độ biểu mẫu và chế độ xem cho loại nút đã có sẵn, bạn phải triển khai mã này trong hook_install ().

Hoặc bạn phải xóa loại nút đầu tiên trên trang web của mình, nhưng sau đó bạn cũng phải xóa nội dung.

Và không, đây không phải là một lỗi, đây là cách nó được xác định để tránh mất cấu hình.


Nó rất buồn. Trong D7, điều này là có thể (thêm các trường vào một trang cơ bản thông qua Tính năng). Tôi vẫn nghĩ nó cũng nên ở D8. Bạn nói rằng nó là để ngăn ngừa mất cấu hình, nhưng trong thực tế, nó chỉ đơn giản là thêm cấu hình (trường, trọng lượng, nhãn, v.v.). Lưu ý rằng tôi cũng gặp vấn đề này với các mô-đun tùy chỉnh của riêng tôi.
Guillaume Bois

Không, nó không chỉ thêm. hiển thị dạng xem và biểu mẫu được chia sẻ trên tất cả các trường của một loại nút. Điều gì xảy ra nếu hai mô-đun cố gắng thêm tệp đó, ai sẽ thắng? Điều gì xảy ra về các trường hiện có đã có trên loại trang? Điều gì xảy ra nếu loại nút cơ bản tồn tại nhưng với các cài đặt khác với trong trường của bạn? Các kịch bản hành vi như thế không được xác định. Đối với một tính năng độc lập, tốt hơn hết là bạn nên xác định loại nút của riêng mình và để triển khai thay đổi này trên trang web của riêng bạn, bạn không cần một mô-đun tính năng như trong 7.x, bạn chỉ cần xuất cấu hình và nhập lại.
Berdir

@berdir cái này rất thú vị. Vì vậy, tôi xuất phát từ vấn đề này từ việc cố gắng tạo một tính năng hồ sơ người dùng bao gồm các ghi chú xem và biểu mẫu. Vì vậy, bạn có nói rằng điều này không thể được thực hiện trong các tính năng bởi vì loại nội dung người dùng sẽ tồn tại và tính năng này đang cố gắng kích hoạt điều đó? Có cách nào để cho phép một tính năng ghi đè lên điều này để ai đó có thể kích hoạt tính năng hồ sơ trên một trang web đã tồn tại không?
kaleemclarkson

Người dùng @kaleemclarkson không phải là một loại nội dung mà là một loại thực thể. Cách duy nhất để làm điều đó là những gì tôi đã mô tả, bạn phải triển khai mã trong hook_install () của mô-đun tính năng của mình để đặt biểu mẫu và xem cấu hình hiển thị. Hoặc sử dụng mô-đun hồ sơ và xác định loại hồ sơ của riêng bạn ở đó.
Berdir

3

Đã tìm thấy mô-đun, sử dụng mô-đun Easy Install để lọc cấu hình hoạt động mà không cần sử dụng devel hoặc drush . Nó hoạt động ngay cả khi bạn đã bỏ lỡ thư mục tùy chọn và tùy chọn bắt buộc trong các tệp cấu hình của mô-đun ( yml )


1
Đây là một lựa chọn tuyệt vời! Tôi chỉ sử dụng nó ngày hôm nay và nó đã tiết kiệm cho tôi rất nhiều thời gian!
rtd1123

3

Tôi có vấn đề tương tự cho trang web pantheon. Tôi đã nhập lệnh drush

Pantheonsite: drush @ pantheon.SITENAME.ENVNAME cấu hình-xóa ERRORNAME

Localsite: drush config-xóa ERRORNAME

nó làm việc cho tôi



0

Nếu bạn muốn thêm cấu hình vào mô-đun tùy chỉnh của mình nhưng chúng đã tồn tại trong cấu hình hoạt động và vì một số lý do, bạn không thể sử dụng drush để xóa các cấu hình đó (trong trường hợp của tôi vì đó là một phần của cấu hình cài đặt), và bạn chắc chắn sẽ không có vấn đề gì với bạn khi ghi đè cấu hình, đây là cách tiếp cận để thay thế các cấu hình đó.

Thêm một thư mục mới trong mô-đun tùy chỉnh của bạn, / config / hook_install và thêm các tệp config .yml của bạn trong thư mục đó, sau đó trong hook_install của mô-đun.

use Drupal\Component\Serialization\Yaml;

/**
 * Implements hook_install().
 */
function mymodule_install() {

  // Replace these configs.  We're using code to do this, as they are already
  // installed.
  $config_files = [
    'language.types',
    'language.negotiation',
  ];

  foreach ($config_files as $config_id) {
    $raw_data = file_get_contents(drupal_get_path('module', 'mymodule') . '/config/hook_install/' . $config_id . '.yml');
    \Drupal::configFactory()->getEditable($config_id)
      ->setData(Yaml::decode($raw_data))
      ->save();
  }
}
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.