MAGE_DIRS parametri bootstrap nella CLI


10

In pub/index.php, il seguente codice viene utilizzato per impostare gli URL di modifica per i media e le risorse statiche in modo da omettere "/ pub":

$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
    DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
    DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
    DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
    DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);

Sfortunatamente negli script CLI ( bin/magento) non c'è nulla di simile.

Ho trovato la classe Magento\Setup\Mvc\Bootstrap\InitParamListenercon il seguente codice:

$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);

Ma non capisco dove questo Zend Service Manager recuperi i dati e come potrebbe essere possibile influenzarli.

Il mio problema concreto è che un indicizzatore deve generare URL completi e attualmente lo fa http://magento.local/pub/media/..., dove ne ho bisognohttp://magento.local/media/...

Come posso dire alla CLI che il mio host virtuale punta pube "pub" non dovrebbe far parte degli URL?

Idealmente, questo dovrebbe funzionare senza dover fare affidamento su parametri CLI aggiuntivi o variabili di ambiente.


2
Questo è stato recentemente segnalato come un bug: github.com/magento/magento2/issues/8868
Scott Buchanan,

1
Ho scoperto che puoi impostarlo usando un argomento simile --magento-init-params=MAGE_DIRS[media][uri]=media. Questo in realtà funziona per tutti i comandi (evidente passando attraverso il codice), ma i comandi al di fuori dello setup:spazio dei nomi danno erroneamente un errore che l'opzione non esiste.
Scott Buchanan,

@ScottSB Non esattamente quello che speravo, ma comunque una scoperta interessante, grazie per quello!
Fabian Schmengler,

Risposte:


6

Dopo molto travaglio, ho trovato una soluzione usando le variabili di ambiente, che so non è quello che volevi. Puoi impostare i parametri usando variabili d'ambiente come questa (sostituendole $APP_ROOTcon la tua vera radice Magento):

env \
    "MAGE_DIRS[base][path]=$APP_ROOT" \
    "MAGE_DIRS[pub][uri]=" \
    "MAGE_DIRS[media][uri]=media" \
    "MAGE_DIRS[static][uri]=static" \
    "MAGE_DIRS[upload][uri]=media/upload" \
    bin/magento indexer:reindex

Si noti che è necessario specificare il percorso di base come sopra perché quando si utilizzano le variabili di ambiente, la MAGE_DIRSdefinizione sovrascrive il default iniziale che lo include. Tuttavia, verrà unito alla configurazione predefinita più completa \Magento\Framework\App\Filesystem\DirectoryList.

Ringraziamo questa risposta dell'architetto capo stesso per avermi messo sul profumo:

Come cambiare la directory "var" di Magento in un'altra posizione in Magento 2?


Come usi le variabili d'ambiente? Questi vengono aggiunti in VHOST come la risposta referenziata?
Harri,

@harri Non capisco la tua domanda. Poiché si tratta di un comando CLI, un vhost non è rilevante, poiché il server Web non è coinvolto. Le variabili di ambiente vengono passate direttamente sulla riga di comando come illustrato (gli argomenti envnel formato FOO=barvengono impostati come variabili di ambiente per il comando alla fine, in questo caso bin/magento).
Scott Buchanan,

Ah, per il mio caso, sto riscontrando questo problema con un metodo eseguito tramite cron, quindi non sono sicuro se esiste un modo per risolvere il problema con il mio bin / magento cron: eseguire in crontab?
Harri,

Prendi semplicemente quello che ho nella risposta e sostituiscilo indexer:reindexcon cron:run(e ovviamente aggiorna anche $ APP_ROOT). Quindi rilascia l'intera cosa nel crontab. Non sono sicuro se a crontab piaceranno le newline, quindi potresti semplicemente sostituirle con spazi (rimuovendo le barre rovesciate finali in quel caso).
Scott Buchanan,

Penso che la soluzione migliore sia qui magento.stackexchange.com/a/174503/41325
A.Maksymiuk


3

Ho trovato un altro modo per impostare MAGE_DIRStramite CLI, basta copiare

/vendor/magento/framework/App/Filesystem/DirectoryList.php

per

/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php 

E ora puoi cambiare la directory predefinita di tutti i file interni.


grazie a ciò mi ha aiutato a cambiare la cartella cache per cli e webapp; D
ZFNerd

In realtà credo che questa sia la migliore soluzione a questo problema. La guida ufficiale di Magento consiglia di utilizzare / lib / internal per personalizzare il core. devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/…
A.Maksymiuk

@ A.Maksymiuk Credo che tu abbia frainteso quella pagina. Sta notando che il codice lì può essere utile per gli sviluppatori di estensioni, ma non raccomanda di personalizzare il core direttamente lì. All'inizio della pagina dice: "Non dovresti mai modificare i file Framework, anche se se stai estendendo Magento, devi sapere come chiamare le librerie Framework."
Scott Buchanan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.