Magento 2 Pub Statik Dosyaları için Symlink'i Varsayılan veya Üretim Modunda Kullanma


11

Durum: Magento 2'nin ücretsiz deneme sürümlerini kullanıyorum ve VPS'de sınırlı HD alanım var. Bu nedenle HD alanı azaltmak için Magento'nun dosyaları varsayılan veya üretim modunda işaretlemesini istiyorum. Site ilk çalıştığında varsayılan bir Magento 2 kurulumunun yaklaşık 420mb olduğunu fark ettim, bu yüzden 350mb kopyalanan dosyalar.

Değiştirdim: app / etc / di.xml satırı:

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

için

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

Bu iyi çalışıyor ve site, varsayılan modda bile sembolik bağlantıları düzgün bir şekilde oluşturacaktır. Ancak sorun, css'in yaratılmaması veya js-translation.json'un oluşturması gereken ancak olmaması gereken dosyalar:

/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

Öyleyse soru şudur: Magento'nun varsayılan olarak veya üretim modunda ve sembolik bağlantıları kullanırken bu dosyaları nasıl oluşturmasını sağlayabilirim?


Belki CSS sorunu için Gulp veya Grunt kullanabilirsiniz: magento.stackexchange.com/questions/162906/… ve js-translation.json dosyası için farklı modlara bakabilirsiniz? gist.github.com/antonmakarenko/7538216
B00MER

Teşekkürler, eğer biri bana adım adım verebilir ve çalıştığını doğrulayabilirse bunu +100'e çıkaracağım.
Kevin Chavez

pub / statik klasör içinde url'yi yeniden yazmaktan ve 'version1488209436' yı url'den kaldırmak ve kullanıcı dostu bir url sağlamaktan sorumlu bir .htaccess dosyası vardır. .Htaccess düzgün çalışmıyorsa, yalnızca bu tür sorunlar oluştu.
Mart'ta Tonmoy

@Tonmoy teşekkür ederim ama bununla hiç ilgili değil. Sorun dosyaları üretmez çünkü varsayılan / üretim modundayken kopyalama yerine sembolik bağlantıları kullanıyorum.
Kevin Chavez

Elinizde veya bir .sh komut dosyasında bu sembolik bağlantıları oluşturabileceğiniz 4 dosya olduğundan.
gizlemek

Yanıtlar:


6

app/etc/di.xml: şuraya yeni öğe ekle 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>

Geliştirici modunda olduğunuzu varsayarsak, sadece içeriğini silin pub/staticve tarayıcınızda sayfanıza gidin - magento statik içeriği yeniden oluşturur.

benim için Magento 2.1.4'te çalıştı (styles-m.css oluşturuldu ve diğer dosyalar işaretlendi).

tüm sihir gerçekleşir 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 sadece stategiesListöğeler arasında dolaşır ve varlığı destekleyen ilk ifadeyi kullanır.

Üretim modunda nasıl çalışır?

Yasal Uyarı: Bu kesmek çekirdek dosya düzenleme içeriyor. dikkat.

hepsi magento 2.1.4'te test edildi

  1. sürüm numarasını statik dosyalardan kaldır Stores > Configuration > Advanced > Developer > Static Files Settings > No
  2. düzenleme vendor/magento/framework/App/StaticResource.phpve launchfonksiyonun şöyle görünmesini sağlayın :

    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. içeriğini silin pub/staticve mağaza URL'nizi bir tarayıcıda ziyaret edin.


Teşekkür ederim bu mükemmel çalıştı! Di.xml dosyasındaki tek satır! Ayrıca nasıl çalıştığına dair açıklamanız için teşekkür ederim. Şimdi yükleme V70 ücretsiz deneme sunucumu yükseltmek zorunda kalmadan para tasarrufu sağlayacak 770mb yerine 482mb.
Kevin Chavez

çok hoş geldiniz efendim sizin için çalıştı sevindim.
Konstantin Gerasimov

sadece StaticResource.php dosyasını değiştirmek ve orijinal uygulamayı / etc / di.xml dosyasını eklemeden tutmak yeterli değil <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item> mi?
LucScu

0

Üretim modunda olmadığında Magento 2 bazı statik kaynaklar için semboller oluşturmaya çalışacaktır. Aşağıdakileri yaparak bu davranışı değiştirebilirsiniz.

  1. App / etc / di.xml dosyasını açın ve virtualType name = "developerMaterialization" bölümünü bulun. Bu bölümde, değiştirilmesi veya silinmesi gereken bir öğe adı = "view_preprocessed" bulacaksınız. İçeriği Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Symlink'ten Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Copy olarak değiştirerek değiştirebilirsiniz.

  2. Pub / static altındaki dosyaları silin. Lütfen .htaccess dosyasını silmeyin.


1
Sorumu anladığınızı sanmıyorum, "kopyalamak" istemiyorum Sınırlı sunucu kaynakları ile yer kazanmak için "symlink" yapmak istiyorum.
Kevin Chavez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.