W końcu zacząłem poważnie patrzeć na Drupala 8 i jestem szczególnie zainteresowany zarządzaniem konfiguracją. Natknąłem się na coś, co może być nieco problematyczne i dotyczy niestandardowej zawartości bloku.
Widzę, że system zarządzania konfiguracją jest w stanie wyeksportować konfigurację bloku - region, kompozycję, wagę, widoczność itp. Jednak rzeczywista zawartość bloku nie pojawia się w eksporcie konfiguracji, co jest rozsądne i zrozumiałe.
Podczas importowania tej konfiguracji bloku do witryny produkcyjnej wydaje się, że tak się dzieje, że konfiguracja bloku jest tworzona i umieszczany jest komunikat wstrzymujący, informujący o tym, że blok jest uszkodzony lub go brakuje. Oczywiście zawartość bloku nie istnieje na serwerze produkcyjnym.
Jak migrować niestandardowe bloki z serwera deweloperskiego / pomostowego na serwer produkcyjny? Zdaję sobie sprawę, że bloki w Drupal 8 są obiektami polowymi, takimi jak węzły, więc trzeba będzie migrować w ten sam sposób, i rozumiem, że w Drupal 8 istnieje interfejs API do migracji, ale wydaje się, że został on stworzony do migracji treści z witryn Drupal 6 i 7 do Drupal 8 w przeciwieństwie do witryn Drupal 8 do Drupal 8.
Ten problem dotyczy w szczególności bloków niestandardowych, ponieważ bloki generowane przez inne moduły, takie jak Widoki, będą oczywiście migrowane w ramach konfiguracji.
Odpowiedzi:
Inną odpowiedzią, o której tu nie wspominałem, jest użycie modułu Simple Block , który jest prawie identyczny z konfiguracją rdzenia „Custom Block”, ale zamiast dziwnej hybrydy treści + konfiguracji masz wszystkie ustawienia i treść Blocka przechowywane w konfiguracji, która może być czysto eksportowana i importowana.
Zobacz, do dalszej dyskusji w rdzeniu Drupala 8: Nie można poprawnie eksportować i importować bloków niestandardowych .
źródło
Właśnie opublikowałem moduł, który to rozwiązuje. Zasadniczo moduł zapewnia typ bloku oparty na konfiguracji (blok stały), który otacza blok niestandardowy (blok zawartości). Jeśli blok zawartości nie istnieje, jest tworzony z domyślną zawartością lub pusty, jeśli nie ustawiono domyślnej treści. Wszystko odbywa się za pomocą interfejsu użytkownika, nie są potrzebne żadne specjalne pliki ani moduł niestandardowy.
Nazwałem ją Naprawiono zawartość bloku i jest ona opublikowana w:
https://www.drupal.org/project/fixed_block_content
źródło
Innym podejściem do utrzymywania zawartości dodanej w ramach rozwoju, która również została wypchnięta do życia, jest użycie modułu Treści domyślnej do wyeksportowania zawartości. Jest on zbudowany tak, aby treść mogła zostać wyeksportowana do folderu „treść” profilu instalacyjnego, a następnie moduł, jeśli jest włączony, automatycznie wprowadza zawartość po zainstalowaniu witryny, ale możliwe jest również importowanie zawartości pojedynczo , na przykład w haku aktualizacji, z poniższym kodem w pliku example.install lub example.profile:
Wyeksportuj niestandardowy blok o identyfikatorze 8:
(Jeśli nie ustawisz ścieżki profilu w ustawieniach Drush, musisz podać ją powyżej).
I użyj wynikowego eksportu w pliku example.install w następujący sposób:
http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf
źródło
Nie jestem pewien, czy dostrzegam silne zalety synchronizacji konfiguracji bloków w wielu środowiskach, ponieważ bloki są tak splecione z zawartością.
Powodem tego jest to, że z plików yml tworzony jest nowy blok, który nie ma tytułu / treści (treści) i dlatego wyświetla komunikat „uszkodzony / brakujący”.
Możesz spróbować ustawić UUID (jeśli chcesz zrobić blok w obu miejscach - upewnij się, że nazwa maszyny pasuje ...) w swojej tabeli blok_koncepcji programistycznej pasuje do tego, co masz w produkcji (inne relacje wydają się używać encji ID). Następnie, gdy wykonujesz synchronizację konfiguracji, możesz zobaczyć „Zobacz różnice” w plikach yml i być może zobaczyć, co jeszcze musisz zmienić w dev, aby dopasować go do produktywnych podręczników itp. Mam to do pracy, ale wciąż doszedłem do wniosku najłatwiej jest zignorować wszystkie konfiguracje bloków w kodzie, chyba że przejdziesz przez ten proces lub stworzysz dla siebie jakąś synchronizację bloków bazy danych za pomocą block_content, block_content__body i block_content_field_data.
Nie jest to zbyt eleganckie, ale może pozwolić na zachowanie konfiguracji bloków w kodzie. W przeciwnym razie, jeśli nadal będziesz wdrażać bloki za pomocą config, zawsze będą one „uszkodzone lub brakujące”.
Inny post na blogu sugeruje utworzenie niestandardowego bloku w środowisku na żywo, ale nie umieszczanie go. Po zsynchronizowaniu bazy danych z urządzeniem deweloperskim można skonfigurować niestandardowy blok, wyeksportować konfigurację, a ponieważ istnieje on już na żywo, możliwe jest importowanie umieszczenia.
źródło
Mając ten sam problem, a nie rozwiązanie, tylko dodatki: We wspólnym rozwoju używamy serwera pomostowego, który pobiera z repozytorium i resetuje całą konfigurację. Oznacza to, że konfiguracja bloku jest resetowana automatycznie, po prostu nie możesz umieszczać bloków, które uważasz za „treść” bezpośrednio na tym serwerze.
Łatwo jest korzystać z synchronizacji drush config-export, wiedząc dokładnie, co zrobiłeś i mając pewność, że wszelkie zmiany konfiguracji są przeznaczone do wdrożenia. Ale Drupal decyduje dla nas, że bloki są konfiguracją (podczas gdy oczywiście zawartość bloku jest traktowana jako treść). Wygląda na to, że jest to zepsute przez projekt.
Wydaje mi się, że na ten czas najbardziej praktycznym rozwiązaniem byłoby dodanie powiązanych plików blokowych do pliku .gitignore.
źródło
Nie jestem też pewien, czy jeśli nie znalazłeś rozwiązania, możesz zajrzeć do tego modułu https://www.drupal.org/project/deploy . Szczerze mówiąc, nie pamiętam, czy mogę wdrożyć bloki wypychania z DEV do PROD, czy nie.
źródło
Myślę, że najlepszym sposobem na poradzenie sobie z tym byłoby:
Tego zazwyczaj używają ludzie, a ja osobiście. Ale synchronizuje całą bazę danych w porównaniu do samej zawartości bloku.
źródło
Proszę mieć ręce na module Structure Sync .
Kroki:
źródło