モジュールを別のフォルダーに安全に移動するにはどうすればよいですか?


7

私はDrupal Consoleを使用してモジュールを作成しましたが、残念ながらそれはそれ自体のフォルダーに置かれていませんでした/modules/custom。どこに行ったか気づく前に、モジュールを有効にしました。

Drupal 6/7では、これは簡単に修正できました。文字通り、ファイルを正しいパスに置き、キャッシュをクリアし(おそらくレジストリを再構築しましたが、正確な科学ではなかった)、すべてが順調でした。

同じことはDrupal 8には当てはまりません。ファイルをサブフォルダーに移動し、キャッシュを再構築しましたが、すべてのリクエストで、Drupalが必要なファイルを含めることができなかったことがわかります。特定のファイルは、ブロッククラスであり、そしてそれはどこDrupalはそれを見つけるためにしようとしているパスは使用され、私はそれを移動してきたではない場所であると。

Symfonyにはコードのオブジェクト化の一部が含まれApcClassLoaderているため、このパス参照を更新するには、Drupalの頭より少し上にあるものをクリアする必要があると思います。

どうやってやるの?

モジュールのアンインストールと再インストールは機能しますが、いったん保存された重要なデータがあると、それは選択肢にはなりません。

私は間違っていました。アンインストールと再インストールは実行可能なオプションではありません。アンインストールして再インストールした後、Drupalはモジュールが定義するカスタムブロックを取得できなくなります。参照がどこかにキャッシュされていると思いますが、モジュールがアンインストールされても消去されません。それがどこにあるのか、それをどのようにクリアするのかを見つける必要があるだけです...


では、Drupal Consoleでfirst.moduleとsecond.moduleを作成した場合、両方のファイルが/ modules / customにありますか?それで私はそれでモジュールを決して作らないでしょう。
kiamlaluno

私は古いバージョンの@kiamlalunoを持っていましたが、今すぐアップグレードしましたが、その問題はありません。問題の問題は、間違いなく、悪化していることです。新しいブロックを追加した新しいモジュールを追加したところ、Drupal が管理ページのそのブロックを取得しなくなりました。構成内で何かが本当に台無しになっていますが、どこを見ればよいのかわかりません:/
Clive

されてApcClassLoader::findFile()から間違ったパスを取得apc_fetch()、または装飾されたクラスローダーが間違った道を戻っていますか?
16年

回答:


11

Apacheを再起動するだけです。その後、APCキャッシュが再構築されます。

rebuild.phpを打つか、drush crを実行することもできます。これらはすべて、APCキャッシュを明示的にクリアしようとします。


ええ、私は同じことをしました(nginx + fpmですが、両方とも数回再起動しました)。さらに、apc_flush_cacheを直接実行し、php5と7を完全に異なるストアに切り替えても、まだ問題が発生していますが、私の設定、特にロジックに問題があると思いますそれらの方法の1つがそれを修正すると言います。明日はさらに詳しく見ていきます
クライブ

夜間は修正されたようですので、とりあえずこれにピンを配置します...
クライヴ

rebuild.php(ブラウザーで開く)が役立ちました。Apacheの再起動とキャッシュのクリアは役に立ちませんでした。
drupalfan 2017

私はキャッシュをクリアし、rebuild.phpを実行し、Apacheを再起動しました。まだ動作せず、同じエラーが発生します。古いモジュールパスを参照するブロック。
ARUN、2018

0

別の解決策がsettings.phpに入れられます:

 /**
 * Class Loader.
 *
 * If the APC extension is detected, the Symfony APC class loader is used for
 * performance reasons. Detection can be prevented by setting
 * class_loader_auto_detect to false, as in the example below.
 */
$settings['class_loader_auto_detect'] = FALSE;

-1

drupalキャッシュをクリアする必要があります。それはdrushでそれを行う方法です:

drush cr

私たちは、Drupalの8、Drupalの7のこの上記の作品についてはこちらを話している
マルコBlazekovic

Markoに感謝します。drupal8ソリューションに対する私の答えを更新しました。
17:41
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.