CLIのMAGE_DIRSブートストラップパラメータ


10

ではpub/index.php、次のコードを使用して、メディアおよび静的アセットの変更URLを設定し、「/ pub」を省略します。

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

残念ながらCLIスクリプト(bin/magento)にはこのようなものはありません。

Magento\Setup\Mvc\Bootstrap\InitParamListener次のコードでクラスを見つけました:

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

しかし、私はこのZend Service Managerがどこでデータを取得し、どのようにしてデータに影響を与えることができるのか理解できません。

私の具体的な問題は、インデクサーが完全なURLを生成するhttp://magento.local/pub/media/...必要があり、現在はのようにする必要があるということです。http://magento.local/media/...

仮想ホストがポイントしpub、「pub」がURLの一部であってはならないことをCLIにどのように伝えることができますか?

理想的には、これは追加のCLIパラメーターや環境変数に依存する必要なく機能するはずです。


2
これは最近バグとして報告されています:github.com/magento/magento2/issues/8868
Scott Buchanan

1
のような引数を使用してこれを設定できることがわかりました--magento-init-params=MAGE_DIRS[media][uri]=media。これは実際にはすべてのコマンドで機能します(コードをステップ実行するとわかります)が、setup:名前空間外のコマンドでは、オプションが存在しないというエラーが誤って表示されます。
スコットブキャナン

@ScottSB私がまさに望んでいたものではありませんが、それでも興味深い発見です、ありがとう!
Fabian Schmengler 2017

回答:


6

多くの苦労の後、私は環境変数を使用する解決策を見つけましたが、それはあなたが望んでいたものではありません。次のような環境変数を使用してパラメーターを設定でき$APP_ROOTます(実際のMagentoルートに置き換えます)。

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

上記のようにベースパスを指定する必要があることに注意してください。環境変数を使用すると、MAGE_DIRS定義によってそれを含む初期デフォルトが上書きされるためです。ただし、の完全なデフォルト設定とマージされ\Magento\Framework\App\Filesystem\DirectoryListます。

私を香りにつけた建築主任自身からのこの答えの功績:

Magentoの「var」ディレクトリをMagento 2の他の場所に変更する方法


環境変数をどのように使用しますか?これらは参照されている回答のようにVHOSTに追加されますか?
ハリ

@harri質問が理解できません。これはCLIコマンドについて話しているため、Webサーバーが関与していないため、vhostは関係ありません。環境変数は、図のようにコマンドラインで直接渡されます(envこの形式の引数FOO=barは、最後にコマンドの環境変数として設定されますbin/magento。この場合)。
スコットブキャナン

私の場合、cron経由で実行するメソッドでこの問題が発生しているので、これをcrontabのbin / magento cron:runで改造する方法があるかどうかわかりませんか?
ハリ

ちょうど私が答えに持っているものを取り、置き換えindexer:reindexてくださいcron:run(もちろんもちろん$ APP_ROOTも更新してください)。次に、その全体をcrontabにドロップします。crontabが改行を気に入るかどうかわからないので、単にそれらをスペースで置き換えることができます(その場合、末尾のバックスラッシュを削除します)。
スコットブキャナン

より良い解決策はここにあると思いますmagento.stackexchange.com/a/174503/41325
A.Maksymiuk


3

私はMAGE_DIRSCLIを介して設定する別の方法を見つけました、コピーするだけです

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

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

そして今、あなたはすべての内部ファイルのデフォルトディレクトリを変更することができます。


THXこれは、CLIおよびWebアプリケーションのためのキャッシュフォルダを変更するために私を助けた; D
ZFNerd

実際、これがこの問題の最良の解決策であると私は信じています。公式のMagentoガイドでは、コアをカスタマイズするために/ lib / internalを使用することを推奨しています。 devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/...
A.Maksymiuk

@ A.Maksymiukあなたはそのページを誤解していると思います。そこにあるコードは拡張機能の開発者に役立つかもしれないことを指摘していますが、コアを直接カスタマイズすることは推奨していません。「Magentoを拡張する場合は、Frameworkライブラリの呼び出し方法を知っている必要がありますが、このページの前半に「Frameworkファイルを変更しないでください」とあります。
スコットブキャナン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.