[magento 2] Exception #0 (LogicException): catalog_product index does not exist yet. Make sure everything is reindexed [risolto]

In Magento 2 l’errore Exception #0 (LogicException): catalog_product index does not exist yet. Make sure everything is reindexed si riferisce al fatto che il catalogo dei prodotti non è stato indicizzato. Questo problema si presenta frequentemente quando si usano altri motori per la gestione del catalogo, come ad esempio ElasticSearch (specialmente con il plugin di Smile-SA, ma non solo).

Per risolvere il problema lanciamo nuovamente l’indicizzazione del catalogo ed aggiorniamo il tutto, procedendo nel modo seguente da riga di commando.

ATTENZIONE: In teoria l’unico comando utile e necessario è il seguente:

Se dovessero sorgere problemi o non esserci risultati, procedere nella maniera descritta di seguito.

Se non lo abbiamo procuriamoci n98-magerun2.

Scarichiamolo nella cartella di installazione di Magento, poi rendiamolo eseguibile, eseguendo i seguenti comandi:

A questo punto eseguiamo la richiesta di reindicizzazione:

Eseguiamola anche sul fulltext:

Faccio notare che sto concedendo al PHP 5G di memoria per poter portare a termine, senza errori, il processo.

Qualora dovessero sorgere errori nel processo di indicizzazione, come per esempio Catalog Search index is locked by another reindex process. Skipping., procediamo nel modo seguente, altrimenti andiamo alla pulizia della cache.

Individuiamo i processi attivi con:

Reimpostiamo il processo che ci interessa con:

Nel dubbi possiamo reimpostarli tutti eseguendo i seguenti comandi:

A questo punto possiamo rilanciare il processo che ci interessa.

Puliamo tutta la cache:

La cache di Magento è una delle cose più problematiche, per cui conviene eseguire anche comandi superflui per ripetere l’operazione per sicurezza.

Detto questo riavviamo apache e il servizio di elastisearch, se lo abbiamo installato:

A questo punto dovrebbe essere tornato tutto normale.

Vedi articolo

[magento2] Script esterno per rimuovere le immagini duplicate su tutti i prodotti

Obiettivo: leggere tutti i prodotti del negozio su Magento 2 e eliminare tutte le immagini duplicate per ciascun prodotto.

In Magento 2 può capitare di ritrovarsi prodotti con immagini duplicate, specialmente a seguito di una importazione di dati. Inoltre sembra che ci siano anche dei bug, o almeno ci sono stati nelle diverse versioni, che producevano questo fastidioso problema.

Quello che vogliamo fare è creare una pagina correggi_immagini.php, nella root del sito, richiamando la quale percorreremo tutti i prodotti in cerca di immagini duplicate e le elimineremo.

Come piccolo accorgimento voglio che lo script sia eseguito solo a seguito di una specifica chiamata GET sulla pagina, per esempio /correggi_immagini.php?auth=1234567890abcdefghilmnopqrstuv

Al posto di 1234567890abcdefghilmnopqrstuv raccomando di sostituire un codice sufficientemente complesso.

Nei commenti ho inserito i dettagli sullo sviluppo dello script:

Vedi articolo

[magento] Errore SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘0009032’ for key ‘UNQ_SALES_FLAT_ORDER_INCREMENT_ID’

Soluzione1: Questo errore si presenta quando si effettua un ordine su Magento, si viene indirizzati al pagamento, ma il pagamento non va a buon fine e si viene rimandati indietro sul negozio. Per risolvere questo problema è sufficiente modificare il file app/code/core/Mage/Sales/Model/Resource/Quote.php come indicato di seguito

Per risolvere il problema posizioniamoci nella cartella principale del negozio in Magento. Dopodiché andiamo a modificare il file app/code/core/Mage/Sales/Model/Resource/Quote.php

Apriamolo e cerchiamo la seguente parte di codice

Alla linea quattro modifichiamo

In modo che diventi:

Salviamo il tutto.

Soluzione2: Questo errore si presenta quando per qualche ragione sono stati inseriti ordini sopra l’ultimo incrementale registrato in eav_entity_type. Per risolvere il problema è sufficiente incrementare sopra l’ultimo valore registrato il valore dell’incrementale. 

Di seguito discutiamo il problema e la soluzione nel dettaglio.

Anzitutto l’errore che si presenta è simile a questo:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0009032' for key 'UNQ_SALES_FLAT_ORDER_INCREMENT_ID', query was: INSERT INTO sales_flat_order (coupon_code, protect_code, shipping_description, is_virtual, store_id, customer_id, base_discount_amount, base_grand_total, base_shipping_amount, base_shipping_tax_amount, base_subtotal, base_tax_amount, base_to_global_rate, base_to_order_rate, discount_amount, grand_total, shipping_amount, shipping_tax_amount, store_to_base_rate, store_to_order_rate, subtotal, tax_amount, total_qty_ordered, customer_is_guest, customer_note_notify, customer_group_id, quote_id, base_shipping_discount_amount, base_subtotal_incl_tax, shipping_discount_amount, subtotal_incl_tax, weight, customer_dob, increment_id, applied_rule_ids, base_currency_code, customer_email, customer_firstname, customer_lastname, customer_middlename, customer_prefix, customer_suffix, customer_taxvat, discount_description, global_currency_code, order_currency_code, remote_ip, shipping_method, store_currency_code, store_name, x_forwarded_for, customer_note, created_at, updated_at, total_item_count, customer_gender, hidden_tax_amount, base_hidden_tax_amount, shipping_hidden_tax_amount, base_shipping_hidden_tax_amnt, shipping_incl_tax, base_shipping_incl_tax, gift_message_id, payment_fee_amount, base_payment_fee_amount, payment_installment_fee_amount, base_payment_installment_fee_amount, payment_tax_amount, base_payment_tax_amount, referral_code, ebizmarts_abandonedcart_flag, payment_fee_tax, base_payment_fee_tax, payment_percentage_fee, base_payment_percentage_fee) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, '1975-10-01 00:00:00', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, '2018-11-28 11:14:46', '2018-11-28 11:14:46', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Questo errore si presenta perché si sta cercando di inserire una chiave duplicata in sales_flat_order. Prima di tutto verifichiamo la cosa spostandoci in sales_flat_order ed effettuando la seguente query:

Nel mio caso il risultato della query era 10.009. Adesso spostiamoci su eav_entity_store. Qui dovremmo vedere una tabella con tutti gli incrementali. Cerchiamo quello che ci interessa. Per trovarlo guardiamo i campi entity_type_id e store_id. Gli entity_type_id hanno come riferimento la tabella eav_entity_type.

Per esempio il codice 5 corrisponde agli ordini, mentre il codice 6 alle fatture/ordini.

Nel mio caso mi accorgo che increment_last_id è su 9033, mentre il massimo valore inserito in sales_flat_order è di 10.009. Quindi mi è sufficiente portare questo valore al di sopra di quello attuale, per esempio impostandolo su 10.010.

Una volta fatto il problema è risolto.

Vedi articolo

[magento] Errore in fase di download degli ordini

Problema: quando si cerca di scaricare l’elenco degli ordini viene restituito il seguente errore MAGENTO – Errore in fase di download degli ordini System.ServiceModel.FaultException: SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine, query was: DESCRIBE sales_flat_order

Soluzione: il disco del server è pieno, probabilmente riempito dai file log di Magento stesso e non è possibile effettuare la maggior parte delle operazioni. Basta cancellare i file log oppure liberare spazio sul server.

La seguente soluzione è stata testata su Magento 1.9.3 e sistema operativo CentOS.

Anzitutto premetto che l’errore non è per forza causato da Magento, ma potrebbe trattarsi del server che per qualche motivo si è riempito (per esempio a causa di aggiornamenti). Anzitutto verifichiamo la nostra situazione digitando su server linux:

Dovremmo vedere un risultato simile al seguente:

Notiamo come la partizione / sia montata su /dev/mapper/centos-root al quale rimangono disponibili solamente 20KB di spazio.

Nella maggior parte dei casi è altamente probabile che i log di magento abbiano saturato lo spazio a disposizione. Per verificarlo spostiamoci su /var/www/sito_magento/var/log.

Digitiamo:

In questo modo dovremmo vedere qualcosa di simile a questo:

Notate che il file system.log ha superato l’assurda dimensione di 57GB! A questo punto puliamo tutti i file log, eventualmente li possiamo prima salvare da qualche parte se lo riteniamo necessario. Digitiamo:

In questo modo cancelleremo tutti i file log presenti nella cartella.

Verifichiamo nuovamente la situazione digitando:

Dovremmo vedere qualcosa di simile a quanto segue:

Notiamo che si sono liberati 56GB e abbiamo nuovamente il 44% dello spazio a disposizione.

Vedi articolo