Buduję niestandardowy moduł w Drupal 8. Zawiera on kilka plików konfiguracyjnych YAML.
W miarę rozwoju muszę zmienić i dodać do konfiguracji, np. Aby dodać kolejne pole do mojej niestandardowej encji.
Obecnie jedynym sposobem, w jaki udało mi się przekonać Drupala do zauważenia zmian, jest odinstalowanie modułu i jego ponowna instalacja.
Czy istnieje sposób, aby Drupal sprawdził, czy pliki konfiguracyjne dostarczone przez moduły są takie same jak aktywna konfiguracja, a jeśli nie, zaktualizował aktywną konfigurację? Jak obsługiwane są aktualizacje modułów? W D7 hook_update_N
można by dodawać pola za pomocą PHP, ale wygląda na to, że CM powinien to obsłużyć w D8?
Rzeczy, które próbowałem po aktualizacji plików yml w module:
drush cr
, config sync.ręczne kopiowanie wszystkich zaktualizowanych plików konfiguracyjnych do
sites/default/files/config_XXX/staging/
- ale to powoduje błąd: „Nie można zaimportować konfiguracji etapowej, ponieważ pochodzi ona z innej witryny niż ta witryna. Możesz synchronizować konfigurację tylko między klonowanymi instancjami tej witryny”. .ręczne importowanie plików jeden po drugim za pomocą menedżera konfiguracji. To działa, ale oczywiście musi istnieć bardziej automatyczny sposób.
[EDYCJA] ręcznie użyj modułu config_update , aby sprawdzić zmiany i „przywrócić” do konfiguracji modułu. Znowu jest to instrukcja.
EDYCJA: Z Zarządzania konfiguracją - zrób i nie
NIE DOTYCZY
Spróbuj zmienić aktywną konfigurację w swojej witrynie, zmieniając pliki w katalogu config / install modułu. To NIE zadziała, ponieważ Drupal będzie czytał z tego katalogu tylko po zainstalowaniu modułu.
... ale nie zmienia się dzieje się zdarzyć, chyba że moduły są zobowiązane do tego, co config one potrzebne w ich pierwszym w historii zwolnić, a może nigdy nie zaktualizować lub dodać config.
Z góry dziękuję.
źródło
hook_update_N
wezmę, ale nie jestem pewien, cohook_update_N
. Doskonały artykuł o Drupal 8 dla małych witryn (i część 2 ). W D8 „strony mają swoją konfigurację, a nie moduły” .Odpowiedzi:
Jak wspomniano w pierwotnym pytaniu i komentarzach uzupełniających, istnieje wiele modułów contrib i metod ręcznych, aby to osiągnąć.
Aby zrobić to automatycznie lub w niestandardowy sposób, myślę, że
hook_update_N()
jest to prawdopodobnie najbardziej opłacalna opcja.Na przykład jest to przykład z Head 2 Head do aktualizacji w
system.site
celu ustawieniadefault_langcode
:Możesz także czytać w config (zalecane tylko w celu dodania nowej konfiguracji, niekoniecznie aktualizacji lub przesłaniania konfiguracji, która mogła zostać dostosowana):
gdzie
$path
jest bezwzględna ścieżka domy_config.foo.yml
pliku.źródło
Ponieważ doszedłem do tego pytania, ale tak naprawdę nie znalazłem tutaj właściwej odpowiedzi na moją sytuację, chciałbym dodać inną odpowiedź.
Uwaga: Anty-wzór przed nami!
Przypadek użycia
Podczas opracowywania projektów stale aktualizujemy nasze środowisko testowe / akceptacyjne o nowe aktualizacje konfiguracji. Weźmy na przykład prosty fikcyjny moduł wiadomości, chcielibyśmy dodać typ zawartości do modułu i wdrożyć go w naszym środowisku akceptacyjnym. Po sprawdzeniu stwierdziliśmy, że brakuje kilku pól i innych elementów związanych z konfiguracją. Ponieważ wiemy, że środowisko akceptacji nie jest aktualizowane w config, tak naprawdę chcemy przeładować całą konfigurację z modułu, dodając nową funkcjonalność i nie przeszkadzać nam w importowaniu każdego zmienionego
.yml
pliku.Potrzebujemy naszej konfiguracji tylko w modułach, gdy rozwijamy wiele witryn. W przypadku pojedynczych witryn korzystamy głównie z wyeksportowanej konfiguracji witryny, w której kolejny krok jest niepotrzebny.
Reimportuj konfigurację całkowicie (anti-pattern!)
Odkryliśmy, że za pomocą usługi ConfigInstaller jesteśmy w stanie ponownie zaimportować pełną konfigurację z określonego modułu.
Używaj ostrożnie!
Chciałbym dodać, że spowoduje to zastąpienie każdej aktywnej zawartości, która została zmieniona w środowisku. Dlatego używaj tego rozwiązania tylko wtedy, gdy masz pewność, że możesz bezpiecznie zastąpić aktywną konfigurację. Nigdy nie użyjemy tego w środowisku produkcyjnym i będziemy go stosować tylko na wczesnym etapie rozwoju.
Najpierw wypróbuj rozwiązanie @ jhedstrom, zanim zaczniesz zastanawiać się nad tym.
źródło
Znalazłem Gist na GitHub, który przywraca / przeładowuje konfigurację modułu przy użyciu drush:
źródło
Na podstawie mojego komentarza: Jak zaktualizować konfigurację modułu?
Stworzyłem małą funkcję, która mi w tym pomaga, oto mój przykładowy kod:
źródło
Powyższa odpowiedź (pełny ponowny import) również działała w moim przypadku użycia, ale najpierw poświęciłem trochę czasu, szukając bardziej selektywnego ponownego importu. Oto kod, który miałem, który działał jak hak aktualizacji i był oparty na kodzie w module config_update:
źródło
Moduł synchronizacji konfiguracji pomaga rozwiązać ten problem w przyjemny sposób. Ten zestaw 7 modułów wydaje się nieco przesadny tylko w tym przypadku (jego celem jest głównie bezpieczne łączenie aktualizacji bez zastępowania dostosowań), ale ze względu na swoją koncepcję pozwala również śledzić i importować zmiany konfiguracji z modułu / instalacji i / foldery opcjonalne szybko.
Zasadniczo możesz to przetestować w następujący sposób:
Uwaga: jeśli tylko chcesz używać config_sync celu przyspieszenia importu config podczas rozwoju modułu (i nie dbam o łączenie się z aktualizacji klientów), to wystarczy, że ten pakiet zainstalowany i włączony tylko na lokalnym (rozwoju) Środowisko ( zakładając, że Twój moduł przejdzie do wyższych środowisk po sfinalizowaniu i użyjesz zarządzania konfiguracją rdzenia D8, aby opublikować jego konfigurację w wyższych środowiskach).
źródło