CLI'daki MAGE_DIRS önyükleme parametreleri


11

İçinde pub/index.php, "/ pub" 'ı atlayacak medya ve statik varlıkların değişiklik URL'lerini ayarlamak için şu kod kullanılır:

$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);

Ne yazık ki CLI scriptlerinde ( bin/magento) böyle bir şey yok.

Magento\Setup\Mvc\Bootstrap\InitParamListenerAşağıdaki kod ile sınıfı buldum :

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

Ancak bu Zend Service Manager'ın verileri nereden aldığını ve bu verileri nasıl etkileyebileceğini anlamıyorum.

Benim somut sorun bir dizinleyici tam URL oluşturmak zorunda ve şu anda gibi http://magento.local/pub/media/..., nerede olması gerekirhttp://magento.local/media/...

CLI'ya sanal ana makinemin işaret ettiğini pubve "pub" ın URL'lerin bir parçası olmaması gerektiğini nasıl söyleyebilirim ?

İdeal olarak, bu ek CLI parametrelerine veya ortam değişkenlerine güvenmek zorunda kalmadan çalışmalıdır.


2
Bu son zamanlarda bir hata olarak bildirildi: github.com/magento/magento2/issues/8868
Scott Buchanan

1
Bunu, gibi bir argüman kullanarak ayarlayabileceğinizi buldum --magento-init-params=MAGE_DIRS[media][uri]=media. Bu aslında tüm komutlar için çalışır (kod üzerinden atlayarak belirgindir), ancak setup:ad alanının dışındaki komutlar seçeneğin bulunmadığına yanlış bir hata verir.
Scott Buchanan

@ScottSB Tam olarak umduğum gibi değil, ama yine de ilginç bir keşif, bunun için teşekkürler!
Fabian Schmengler

Yanıtlar:


7

Çok fazla travmadan sonra, ortam değişkenlerini kullanarak bir çözüm buldum, ki bu istediğini değil. Parametreleri, böyle ortam değişkenlerini kullanarak ayarlayabilirsiniz ( $APP_ROOTgerçek Magento kökünüzle değiştirerek ):

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

Ortam değişkenlerini kullandığınızda, MAGE_DIRStanımınız bunu içeren ilk varsayılanın üzerine yazdığından, temel yolu yukarıdaki gibi belirtmeniz gerektiğini unutmayın . Ancak, daha dolgun varsayılan yapılandırma ile birleştirilecektir \Magento\Framework\App\Filesystem\DirectoryList.

Beni bu kokuya verdiğim için baş mimarın bu cevabına teşekkür ediyorum:

Magento'nun "var" dizinini Magento 2'deki başka bir yere nasıl değiştirebilirim?


Ortam değişkenlerini nasıl kullanıyorsunuz? Bunlar referans verilen cevap gibi VHOST'a ekleniyor mu?
harri

@ harri Sorunu anlamıyorum. Bu bir CLI komutu hakkında konuştuğundan, web sunucusu dahil olmadığından bir hayalet alakalı değildir. Ortam değişkenleri, komut satırında gösterildiği gibi iletilir ( envbiçimdeki argümanlar FOO=bar, sondaki komut için ortam değişkenleri olarak ayarlanır bin/magento).
Scott Buchanan

Ah benim için bu sorunu cron üzerinden çalıştırmak bir yöntemle alıyorum, bu yüzden bin / magento cron: crontab içinde çalıştırmak için bu bir yolu var mı emin değilim?
harri

Tıpkı cevap ne var alıp yerine indexer:reindexsahip cron:run(elbette çok $ APP_ROOT ve hala güncelleme). Sonra her şeyi crontab'a bırakın. Crontab'ın yeni satırları beğenip beğenmeyeceğinden emin değilsiniz, böylece bunları yalnızca boşluklarla değiştirebilirsiniz (bu durumda sondaki ters eğik çizgileri kaldırarak).
Scott Buchanan

Daha iyi bir çözüm geldiğini
A.Maksymiuk


2

MAGE_DIRSCLI ile ayarlamanın başka bir yolunu buldum , sadece kopyala

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

için

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

Ve şimdi tüm dahili dosyaların varsayılan dizinini değiştirebilirsiniz.


thx Bu cli ve webapp için önbellek klasörünü değiştirmek için bana yardımcı oldu; D
ZFNerd

Aslında bunun bu sorunun en iyi çözümü olduğuna inanıyorum. Resmi Magento kılavuzu çekirdeği özelleştirmek için / lib / internal kullanılmasını önerir. devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/…
A.Maksymiuk

1
@ A.Maksymiuk Bu sayfayı yanlış anladığınıza inanıyorum. Kod uzantısı geliştiriciler için yararlı olabileceğini belirterek, ancak edilir değil doğrudan oraya özelleştirme çekirdeğini tavsiye. Sayfanın başlarında şöyle diyor: "Magento'yu genişletiyorsanız, Framework kitaplıklarını nasıl çağıracağınızı bilmelisiniz, ancak Framework dosyalarını asla değiştirmemelisiniz."
Scott Buchanan
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.