web-dev-qa-db-ja.com

移行用の移行ソースプラグイン(d7_file)が見つからないのはなぜですか?

大まかに https://www.previousnext.com.au/blog/migrating-drupal-7-の指示に従って、古いD7サイトから新しいD8サイトへのファイルの移行を記述しようとしています。 file-entities-drupal-8-media-entities

インストールフォルダーに移行を含む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にあります。だからそれは間違いなくそこにあり、すべてが正しく見えます、それは単に見つかりません。

4
George

migrate_drupalモジュールが有効になっています。 (それが理由かどうかはわかりませんが、これをローカルで再現したときに最初につまずいたものです。)

これがわかりにくい理由:

移行プラグインには複数のプロバイダーがあり(プラグインを使用するにはすべて有効にする必要があります)、関連するプラグインマネージャーは実際に独自のディスカバリーを使用して、親クラスの名前空間からプロバイダーを自動的に推測します。したがって、d7_fileプラグインには、プロバイダー「file」と「migrate_drupal」があります。これは、ファイルモジュールによって提供されますが、migrate_drupalモジュールからのクラスを拡張するためです。

実際には、migrateのマルチプロバイダー機能により、「見えない」依存関係が追加され、必要なモジュールがインストールされていないときにプラグインが自動的に削除されます。

2