kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Raul Sanchez
Raul Sanchez
Question

Magento2 - setup:di:compile

Saya telah bekerja dalam sebuah proyek dengan beberapa kode khusus... ini adalah proyek Magento 2 pertama kami, jadi (seperti semua orang di sini saya pikir) setiap hari kami mempelajari hal-hal baru, dan kami harus mengubah cara untuk menangani versi Magento baru ini.

Alasan untuk pertanyaan ini adalah menanyakan tentang perintah setup:di:compile

Saya sudah menggunakannya sejak hari pertama dengan Magento 2, karena bin/magento memintanya setelah setiap setup:upgrade, dengan pesan "Please re-run Magento compile command"

Nah... Saya menemukan bahwa mengeksekusi setup:di:compile merusak halaman tampilan produk di proyek ini, dengan Fatal Error yang benar-benar ambigu. Saya telah menghabiskan seluruh hari kerja mencoba untuk men-debug dan menguji dengan perubahan kode dengan hasil nol

Hari ini, saya telah menemukan bahwa jika saya menghilangkan perintah itu maka semua bekerja seperti pesona, bahkan dalam mode produksi

Jadi, pertanyaannya adalah... apa sebenarnya perintah setup:di:compile itu? Apakah diperlukan? Hanya direkomendasikan? Atau itu adalah perintah yang sudah usang, yang tidak perlu dieksekusi?

UPDATE

Seperti yang diminta oleh beberapa pengguna, ini adalah Fatal Error yang saya maksudkan

Kesalahan fatal PHP: Tidak dapat menginstansiasi kelas abstrak Magento\Catalog\\Block\Product\View\AbstractView in ***/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php pada baris 93

Saya telah mencari blok kustom apa pun yang menggunakan Magento\Catalog\Block\Product\View\AbstractView tetapi saya hanya menemukannya di file tata letak, tidak ada di konstruktor kelas blok mana pun

Apa yang saya tidak mengerti adalah: mengapa Magento melempar Kesalahan Fatal ini dengan kode yang dikompilasi, tetapi berfungsi seperti pesona tanpa kode yang dikompilasi

11 2017-07-18T08:44:48+00:00 3
Raul Sanchez
Raul Sanchez
Pertanyaan edit 11 Desember 2017 в 9:56
Magento
magento2
setup-upgrade
setup-di-compile
bin-magento
Solution / Answer
 Tjitse
Tjitse
18 Juli 2017 в 10:58
2017-07-18T10:58:48+00:00
Lebih
Sumber
Sunting
#21246531

Perintah setup:di:compile menghasilkan isi folder var/di di Magento <2.2 dan generated untuk Magento >= 2.2

Menurut Magento, hal ini memiliki tujuan sebagai berikut:

  • Pembuatan kode aplikasi (pabrik, proxy, dan sebagainya)
  • Agregasi konfigurasi area (yaitu, injeksi ketergantungan yang dioptimalkan konfigurasi per area)
  • Pembuatan interceptor (yaitu, dioptimalkan pembuatan kode interseptor yang dioptimalkan)
  • Pembuatan cache intersepsi
  • Pembuatan kode repositori (yaitu, kode yang dihasilkan untuk API)
  • Pembuatan atribut data layanan (yaitu, ekstensi yang dihasilkan kelas ekstensi yang dihasilkan untuk objek data)

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

Namun, ketika Anda menempatkan Magento dalam mode produksi, tanpa kompilasi memang masih berfungsi. Jadi menurut dokumen Magento ini lebih merupakan langkah optimasi (yaitu, pembuatan kode interceptor yang dioptimalkan)

Ketika kita memiliki kesalahan dalam perintah setup:di:compile, ini sebagian besar karena kesalahan di salah satu konstruktor kelas php kustom.

 vitoriodachef
vitoriodachef
Jawaban edit 16 Mei 2018 в 9:10
20
0
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
Prince Patel
Prince Patel
18 Juli 2017 в 5:17
2017-07-18T17:17:14+00:00
Lebih
Sumber
Sunting
#21246532

Tidak wajib menjalankan perintah setup:di:compile setiap saat tetapi jika Anda telah melakukan perubahan kode apa pun khususnya dengan metode pabrik, proxy, menambahkan plugin atau kompilasi kode apa pun maka Anda harus menjalankan perintah ini.

Lebih Detail

magento setup:di:compile untuk menghasilkan file yang diperlukan. Kedua opsi tersebut berakhir dengan menghasilkan kelas-kelas di direktori MAGENTO_ROOT/var/generation (atau /generated jika Magento 2.2+).

**Kelas apa yang dihasilkan?

  1. Pabrik
  2. Proxy
  3. Plugin

Pabrik

Pabrik digunakan untuk menginstansiasi objek yang tidak dapat diinjeksi secara otomatis. Misalnya, objek produk harus dimuat dari database, tetapi kontainer injeksi ketergantungan tidak memiliki informasi yang cukup untuk membuat objek ini. Itulah mengapa kita menggunakan factories.

Proxy

Magento 2 menggunakan injeksi konstruktor di mana semua dependensi diperlukan. Anda tidak dapat menginstansiasi objek tanpa melewatkan semua dependensi. Bagaimana jika Anda ingin memiliki dependensi opsional? Itulah mengapa proxy ada.

Plugin (Pencegat)

Sederhananya, plugin adalah mekanisme kustomisasi utama untuk Magento 2. Tidak ada lagi penulisan ulang kelas. Ini memungkinkan Anda untuk mengaitkan dan melakukan sesuatu sebelum, setelah atau di sekitar metode publik aplikasi apa pun.

ketika Anda menjalankan perintah setup:di:compile, ia melakukan hal-hal di bawah ini

Kompilasi kode terdiri dari semua hal berikut tanpa urutan tertentu:

  • Pembuatan kode aplikasi (pabrik, proxy, dan sebagainya)

  • Agregasi konfigurasi area (yaitu, konfigurasi injeksi ketergantungan yang dioptimalkan per area) konfigurasi injeksi ketergantungan yang dioptimalkan per area)

  • Pembuatan interceptor (yaitu, pembuatan kode yang dioptimalkan dari interceptor)

  • Pembuatan cache intersepsi Pembuatan kode repositori (yaitu, kode yang dihasilkan untuk API)

  • Pembuatan atribut data layanan (yaitu, ekstensi yang dihasilkan kelas ekstensi yang dihasilkan untuk objek data)

Rujuk jawaban ini untuk mengetahui kapan kita harus menjalankan perintah yang mana: https://magento.stackexchange.com/a/184927/35758

Ricardo Martins
Ricardo Martins
Jawaban edit 28 Juni 2019 в 3:58
10
0
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
 drew7721
drew7721
22 Februari 2018 в 3:46
2018-02-22T15:46:48+00:00
Lebih
Sumber
Sunting
#21246533

Magento akan tetap berjalan dalam produksi dan dev tanpa perintah di:compile. Ini akan benar-benar mengkompilasi Interceptors sesuai kebutuhan dan menyimpannya di folder generated.

Bahkan jika berhasil, itu tidak berarti Anda harus melewatkan langkah ini! Bahkan, ketika ini dijalankan, magento juga memeriksa duplikasi injeksi, loop ketergantungan, dan langkah-langkah mendasar lainnya yang akan membuat situs Anda lebih stabil dan kecil kemungkinannya untuk crash dan mati.

Saya sangat yakin bahwa kesalahan itu disebabkan oleh penggunaan kelas yang tidak dapat dikompilasi oleh Magento karena beberapa argumen konstruktor yang salah.

Error yang Anda posting cukup samar-samar, tetapi saya yakin Anda memiliki kelas yang memperluas kelas AbstractView, 99% itu adalah blok di suatu tempat di modul kustom Anda yang tidak meneruskan argumen yang benar ke metode parent::__construct(). Oleh karena itu ketika diinstansiasi gagal.

Perhatikan bahwa semua blok memperluas kelas AbstractView sehingga Anda harus menjalankan perintah kompilasi dengan xdebug aktif dan mengatur log untuk melihat jejak tumpukan untuk melihat kelas apa yang disebut terakhir sebelum gagal.

Fakta bahwa situs berjalan tanpa kesalahan itu berarti bahwa Anda tidak benar-benar menggunakan blok yang terganggu di mana saja di halaman Anda, tetapi Magento masih akan mencoba mengkompilasinya ketika menjalankan perintah compile, sehingga gagal.

2
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Анна Литвиненко
Terdaftar 2 hari yang lalu
2
Inessa bu
Terdaftar 1 bulan yang lalu
3
Denis Babushkin
Terdaftar 1 bulan yang lalu
4
asakuno asakuno
Terdaftar 1 bulan yang lalu
5
aldo salerno
Terdaftar 2 bulan yang lalu
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
ID
JA
© kzen.dev 2023
Sumber
magento.stackexchange.com
di bawah lisensi cc by-sa 3.0 dengan atribusi