magento 2 - W jakim przypadku musimy uruchomić to polecenie magento setup: di: compile?

12

W jakim przypadku musimy uruchomić to polecenie magento setup:di:compile?

MrTo-Kane
źródło
Po zainstalowaniu nowych modułów i wyczyszczeniu niektórych katalogów
Jaleel
i wszystko inne?
MrTo-Kane
Również po przejściu do trybu produkcyjnego, ponieważ w tym trybie nie jest generowana żadna zawartość statyczna; to wszystko podawane odpub/static
Steve Johnson

Odpowiedzi:

8
  • Podczas wdrażania (tj. Kiedy wprowadzono zmiany w systemie w trybie produkcyjnym)

    Należy pamiętać, że w trybie produkcyjnym (wersje 2.0.5 i wcześniejsze) należy użyć kompilacji „wielu dzierżawców”. Naprawiono w wersji 2.0.6 i nowszych.

    bin/magento setup:di:compile-multi-tenant

    Zobacz: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html

  • Możesz także użyć kompilacji w trybie programistycznym, co powinno przyspieszyć stronę, ale z drugiej strony spowalnia rozwój, ponieważ będziesz musiał uruchamiać bin/magento setup:di:compileza każdym razem, gdy dodajesz nowe klasy z zależnościami (parametry konstruktora) lub zmieniasz zależności istniejących klas .

    Jest to opcjonalne i prawdopodobnie nie jest to dobry pomysł. Jeśli kompilacja została już uruchomiona w środowisku programistycznym, usuń pliki, var/diaby ją wyłączyć.

Fabian Schmengler
źródło
1
setup: di: compile-multi-tenant został usunięty
Antonino Bonumore
Czy możemy uzyskać potwierdzenie, czy usunięcie sztuczki z folderu var / di działa? Nie wydaje mi się
Wildcard27
@ Wildcard27 co jeśli usuniesz również katalogi w var/generation?
Fabian Schmengler
@FabianSchmengler Właśnie utworzyłem Actiontest. - Załadowano stronę, błąd. - Usunięte dii generationfoldery, ponownie załadowane, działa. - Dodaj nową zależność, przeładuj stronę, błąd. Jednak żaden difolder nie jest generowany. - Usuń generationponownie, załaduj ponownie, działa. Wniosek: Usuń folder generowania po dodaniu zależności i nie będziesz musiał uruchamiać setup:di:compile. Gdyby ktoś inny mógł to potwierdzić, byłoby świetnie.
Wildcard27
1

Zgodnie z moim komentarzem do innej odpowiedzi:

Można uniknąć uruchamiania setup:di:compilepolecenia po każdym dodaniu zależności, po prostu usuwając foldery var/dii przed ponownym załadowaniem strony .var/generation

Z moich własnych testów Magento odtworzy var/generationfolder, ale nie var/difolder, dopóki nie setup:di:compilezostanie ponownie uruchomiony. Oznacza to, że powinieneś mieć tylko var/generationfolder do usunięcia.

Co zabawne, działa to również z pub/static/*i setup:static-content:deploy. Wynika to z faktu, że Magento wydaje się tworzyć dowiązania symboliczne do plików potrzebnych, jeśli zawartość statyczna jest budowana przez przeładowanie strony, a nie CLI.

Ludzie w naszym biurze mieli problemy z uruchomieniem powyższych poleceń podczas korzystania z Docker na Maca. Przetwarzanie pliku było po prostu zbyt wolne. Wykonując powyższe kroki, programowanie powinno być znacznie szybsze.

Prawdopodobnie najlepiej zauważyć, że nie zadziała to w trybie produkcyjnym lub domyślnym. To jest tylko dla rozwoju. Jak wspomniał Fabian Schmengler, początkowe ładowanie strony będzie wolniejsze niż normalnie, ale nie powinno być tak wolne jak uruchamianie setup:static-content:deploylub `setup: di: compile.

Dla porównania używam wersji 2.1.5 .

Wildcard27
źródło
0

Zaczerpnięte z bloga Alana Storma .

Kompilacja wtrysku zależności

Na początek powinniśmy wyjaśnić problem, który te polecenia próbują rozwiązać. Kiedy wysyłasz system Magento 2 do produkcji, musisz uruchomić następujące polecenie

php bin/magento setup:di:compile

To polecenie skanuje kod w systemie i generuje wstępnie wiele rzeczy (głównie związanych z systemem zarządzania obiektami i wstrzykiwaniem zależności), które Magento ładuje dynamicznie podczas pracy w trybie programisty. Jest to zarówno kwestia wydajności, jak i bezpieczeństwa, a pełne omówienie tego jest poza zakresem tego artykułu.

Suresh Chikani
źródło
1
„Jest to zarówno kwestia wydajności, jak i bezpieczeństwa, a pełne omówienie tego jest poza zakresem tego artykułu”. to rozdało. rażąca kopia z Alan Storm: alanstorm.com/magento_2_di_compile_pre-scan_w__commerce_bug
Fabian Schmengler,