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?

Kevin Chavez
fonte
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.

Konstantin Gerasimov
fonte
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.

Gulshan
fonte
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