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.