Magento 2 Use o link simbólico no modo padrão ou de produção para arquivos estáticos de pub


11

Situação: Estou executando alguns testes gratuitos do Magento 2 e tenho espaço HD limitado no VPS. Por esse motivo, para reduzir o espaço em HD, quero que o Magento vincule os arquivos no modo padrão ou de produção. Percebi que uma instalação padrão do Magento 2 é de cerca de 420mb, uma vez que o site é executado, ele vai para cerca de 770mb, então 350mb disso são arquivos copiados.

Modifiquei: app / etc / di.xml line:

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

para

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

Isso funciona bem e o site criará corretamente os links simbólicos, mesmo quando no modo padrão. No entanto, o problema é que o css não é criado ou o js-translation.json os arquivos que ele deve criar, mas não são:

/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

Portanto, a pergunta é: como faço para o Magento também gerar esses arquivos no modo padrão ou de produção e usando links simbólicos?


Talvez você possa usar Gulp ou Grunt para o problema de CSS: magento.stackexchange.com/questions/162906/… e procurar os diferentes modos do arquivo js-translation.json? gist.github.com/antonmakarenko/7538216
— B00MER

Obrigado, aumentarei isso para +100 se alguém puder me dar passo a passo e verificar se funciona.
— 21417 Kevin Chavez

dentro da pasta pub / static, há um arquivo .htaccess, responsável por reescrever o URL e remover 'version1488209436' do URL e fornecer um URL amigável. Se o .htaccess não funcionar corretamente, apenas esse tipo de problema ocorreu.
— precisa saber é

obrigado @Tonmoy, mas não está relacionado a isso. O problema é que os arquivos não são gerados porque estou usando links simbólicos em vez de copiar enquanto estiver no modo padrão / produção.
— Kevin Chavez

Como existem 4 arquivos, você pode criar esses links simbólicos manualmente ou em um script .sh.
— obscuro

Respostas:


5

app/etc/di.xml: adicione um novo item 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>

Supondo que você esteja no modo de desenvolvedor, exclua o conteúdo pub/statice vá para a sua página no navegador - o magento irá gerar novamente o conteúdo estático.

trabalhou para mim no Magento 2.1.4 (styles-m.css foi gerado e outros arquivos foram linkados).

toda a mágica acontece em 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');
}   

O Magento apenas percorre stategiesListitens e usa a primeira estratégia que suporta o ativo.

Como fazê-lo funcionar no modo de produção?

Isenção de responsabilidade: este truque contém edição de arquivo principal. cuidado.

todos testados no magento 2.1.4

  1. remova o número da versão dos arquivos estáticos Stores > Configuration > Advanced > Developer > Static Files Settings > No
  2. edite vendor/magento/framework/App/StaticResource.phpe faça com que a launchfunção fique assim:

    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. exclua o conteúdo pub/statice visite o URL da sua loja em um navegador.


Obrigado por isso funcionou perfeitamente! Apenas essa linha no di.xml! Também aprecio sua explicação de como funciona. Agora, a instalação é de 482mb em vez de 770mb, o que me poupará dinheiro sem precisar atualizar meu servidor de avaliação gratuita do VPS.
— 22417 Kevin Chavez

de nada, senhor. Fico feliz que funcionou para você.
— Konstantin Gerasimov

não basta modificar apenas StaticResource.php e manter o aplicativo original / etc / di.xml sem adicionar <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item> ?
— 21817 Lucscu

0

Quando não estiver no modo de produção, o Magento 2 tentará criar links simbólicos para alguns recursos estáticos. Você pode alterar esse comportamento fazendo o seguinte.

  1. Abra o aplicativo / etc / di.xml e localize a seção virtualType name = "developerMaterialization". Nessa seção, você encontrará um nome de item = "view_preprocessed" que precisa ser modificado ou excluído. Você pode modificá-lo alterando o conteúdo de Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Symlink para Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Copy

  2. Exclua os arquivos em pub / static. Por favor, não apague o arquivo .htaccess.


1
Eu acho que você não entendeu minha pergunta, não quero "copiar". Quero "vincular" para economizar espaço com os recursos limitados do servidor.
— Kevin Chavez
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.