インストールフォルダーに移行を含むmyproject_migrationモジュールがあります。
myproject_migration.info.yml:
name: MyProject Migration
description: Migrations for existing MyProject content.
package: myproject
type: module
core: '8.x'
dependencies:
- file
- migrate
- migrate_plus
- migrate_source_csv
- migrate_tools
config/install/migrate_plus.migration.furniture_files.yml:
id: files
label: Files from the old D7 site.
migration_group: myproject
dependencies:
enforced:
module:
- myproject_migration
- file
source:
plugin: d7_file
scheme: public
constants:
source_base_path: /
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- filepath
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
created: timestamp
changed: timestamp
#uid: uid
destination:
plugin: 'entity:file'
モジュールを有効にします。 drush migrate-status
を実行して取得:
例外「Drupal\Component\Plugin\Exception\PluginNotFoundException」 ...「「d7_file」プラグインが存在しません」というメッセージが表示される .../var/www/myproject/docroot/core/lib/Drupal/Component/Plugin/Discovery/DiscoveryTrait.php:52 スタックトレース: #0 /var/www/myproject/docroot/core/lib/Drupal/Component/Plugin/Discovery/DiscoveryCachedTrait.php(25): Drupal\Core\Plugin\DefaultPluginManager->doGetDefinition(Array、 'd7_file'、 true) #1 /var/www/myproject/docroot/core/modules/migrate/src/Plugin/MigratePluginManager.php(53): Drupal\Core\Plugin\DefaultPluginManager->getDefinition ( 'd7_file') #2 /var/www/myproject/docroot/core/modules/migrate/src/Plugin/Migration.php(335): Drupal\migrate\Plugin\MigratePluginManager -> createInstance( 'd7_file'、Array、Object(Drupal\migrate\Plugin\Migration)) #3 /var/www/myproject/docroot/modules/contrib/migrate_tools/migrate_tools.drush.inc(471 ):Drupal\migrate\Plugin\Migration-> getSourcePlugin() ...
私はdrush config-import --partial -y --source=modules/custom/myproject_migration/config/install/
を使用してこの構成の更新をインポートしています。
プラグインはcore\modules\file\src\Plugin\migrate\source\d7\File.phpにあり、IDは「d7_file」です。 https://www.drupal.org/docs/8/api/migrate-api/migrate-source-plugins のチェックリストを実行すると、MigrateSourceInterfaceが実装されます。 @MigrateSourceアノテーションが付けられています。 「file」名前空間の下の名前空間サブディレクトリPlugin\migrate\sourceにあります。だからそれは間違いなくそこにあり、すべてが正しく見えます、それは単に見つかりません。
migrate_drupal
モジュールが有効になっています。 (それが理由かどうかはわかりませんが、これをローカルで再現したときに最初につまずいたものです。)
これがわかりにくい理由:
移行プラグインには複数のプロバイダーがあり(プラグインを使用するにはすべて有効にする必要があります)、関連するプラグインマネージャーは実際に独自のディスカバリーを使用して、親クラスの名前空間からプロバイダーを自動的に推測します。したがって、d7_fileプラグインには、プロバイダー「file」と「migrate_drupal」があります。これは、ファイルモジュールによって提供されますが、migrate_drupalモジュールからのクラスを拡張するためです。
実際には、migrateのマルチプロバイダー機能により、「見えない」依存関係が追加され、必要なモジュールがインストールされていないときにプラグインが自動的に削除されます。