Magento 2 Usa Symlink in modalità predefinita o di produzione per file statici pub


11

Situazione: sto eseguendo alcune prove gratuite di Magento 2 e ho uno spazio HD limitato sul VPS. Per questo motivo per ridurre lo spazio in HD, voglio avere Magento come link simbolico dei file in modalità predefinita o di produzione. Ho notato che un'installazione predefinita di Magento 2 è di circa 420mb una volta che il sito viene eseguito per circa 770mb, quindi 350mb di questi sono file copiati.

Ho modificato: riga app / etc / di.xml:

 <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>

per

 <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>

Funziona bene e il sito creerà correttamente i collegamenti simbolici anche in modalità predefinita. Tuttavia, il problema è che il CSS non è stato creato o js-translation.json i file che dovrebbe creare ma non sono:

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/styles-m.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/styles-l.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/print.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/js-translation.json

Quindi la domanda è: come faccio a far sì che Magento generi anche questi file in modalità predefinita o di produzione e usando i collegamenti simbolici?


Forse potresti usare Gulp o Grunt per il problema CSS: magento.stackexchange.com/questions/162906/… e esaminare le diverse modalità per il file js-translation.json? gist.github.com/antonmakarenko/7538216
— B00MER

Grazie, lo farò fino a +100 se qualcuno può darmi passo dopo passo e verificare che funzioni.
— Kevin Chavez,

all'interno della cartella pub / static è presente un file .htaccess, che è responsabile di riscrivere l'URL e rimuovere "version1488209436" dall'URL e fornire un URL intuitivo. Se .htaccess non funziona correttamente, si è verificato solo questo tipo di problemi.
— Tonmoy

grazie @Tonmoy ma non è affatto collegato a questo. Il problema è che i file non vengono generati perché sto utilizzando i collegamenti simbolici anziché la copia in modalità predefinita / produzione.
— Kevin Chavez,

Dal momento che ci sono 4 file, è possibile creare quei collegamenti simbolici manualmente o in uno script .sh.
— oscuro il

Risposte:


5

app/etc/di.xml: aggiungi nuovo elemento a stategiesList:

<virtualType name="developerMaterialization" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
    <arguments>
        <argument name="strategiesList" xsi:type="array">
            <item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
            <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
/* ++ */    <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>
        </argument>
    </arguments>
</virtualType>

Supponendo che tu sia in modalità sviluppatore, basta eliminare il contenuto pub/statice andare alla tua pagina nel browser - magento rigenera il contenuto statico.

ha funzionato per me in Magento 2.1.4 (styles-m.css è stato generato e altri file sono stati collegati simbolicamente).

tutta la magia accade in vendor/magento/framework/App/View/Asset/MaterializationStrategy/Factory.php:

public function create(Asset\LocalInterface $asset)
{   
    if (empty($this->strategiesList)) {
        $this->strategiesList[] = $this->objectManager->get(self::DEFAULT_STRATEGY);
    }   

    foreach ($this->strategiesList as $strategy) {
        if ($strategy->isSupported($asset)) {
            return $strategy;
        }   
    }   

    throw new \LogicException('No materialization strategy is supported');
}   

Magento scorre semplicemente gli stategiesListoggetti e usa la prima strategia che supporta l'asset.

Come farlo funzionare in modalità produzione?

Disclaimer: questo hack contiene l'editing di file core. state attenti.

tutti testati su magento 2.1.4

  1. rimuovere il numero di versione dai file statici in Stores > Configuration > Advanced > Developer > Static Files Settings > No
  2. modificare vendor/magento/framework/App/StaticResource.phpe rendere la launchfunzione simile a questa:

    public function launch()
    {   
    // disabling profiling when retrieving static resource
    \Magento\Framework\Profiler::reset();
    $appMode = $this->state->getMode();
    /*if ($appMode == \Magento\Framework\App\State::MODE_PRODUCTION) {
        $this->response->setHttpResponseCode(404);
    } else {*/
        $path = $this->request->get('resource');
        $params = $this->parsePath($path);
        $this->state->setAreaCode($params['area']);
        $this->objectManager->configure($this->configLoader->load($params['area']));
        $file = $params['file'];
        unset($params['file']);
        $asset = $this->assetRepo->createAsset($file, $params);
        $this->response->setFilePath($asset->getSourceFile());
        $this->publisher->publish($asset);
    /*}*/
    return $this->response;
    }   
  3. elimina i contenuti pub/statice visita l'URL del tuo negozio in un browser.


Grazie, ha funzionato perfettamente! Solo quella riga nel di.xml! Inoltre apprezzo la tua spiegazione di come funziona. Ora l'installazione è 482 MB anziché 770 MB, il che mi farà risparmiare denaro non dovendo aggiornare il mio server di prova gratuito VPS.
— Kevin Chavez,

sei il benvenuto, signore, sono contento che abbia funzionato per te.
— Konstantin Gerasimov,

non è sufficiente modificare solo StaticResource.php e mantenere l'app originale / etc / di.xml senza aggiungere <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item> ?
— LucScu,

0

Quando non è in modalità di produzione Magento 2 proverà a creare collegamenti simbolici per alcune risorse statiche. È possibile modificare tale comportamento nel modo seguente.

  1. Apri l'app / etc / di.xml e trova la sezione virtualType name = "developerMaterialization". In quella sezione troverai un nome elemento = "view_preprocessed" che deve essere modificato o eliminato. Puoi modificarlo cambiando il contenuto da Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Symlink a Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Copy

  2. Elimina i file in pub / static. Non eliminare il file .htaccess.


1
Non credo che tu abbia capito la mia domanda, non voglio "copiare", voglio "symlink" per risparmiare spazio con le risorse limitate del server.
— Kevin Chavez,
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.