web-dev-qa-db-ja.com

画像とファイルの移行

Drupal 7サイトをDrupal 8サイトに移行します。移行用のモジュールをすでに作成しており、タイトルのあるコンテンツタイプがあります。 、field_pictureおよびfield_text in Drupal 7。

Drupal 8に移行したいのですが、field_text = field_descriptionで、field_pictureはfield_imageです。

私は以下を試しました:

id: drupal7_fruit
label: "Test migration"
migration_group: drupal7
source:
  plugin: d7_node
  node_type: fruit
process:
  nid: nid
  vid: vid
  langcode:
    plugin: default_value
    source: language
    default_value: und
  title: title
  uid: node_uid
  status: status
  created: created
  changed: changed
  promote: promote
  sticky: sticky
  revision_uid: revision_uid
  revision_log: log
  revision_timestamp: timestamp
  field_description: field_text
  field_image:
    plugin: iterator
    source: field_picture
    process:
      target_id: fid
      alt: alt
      title: title
      width: width
      height: height
destination:
  plugin: 'entity:node'
  default_bundle: fruit
migration_dependencies: {}

説明とタイトルは移行できましたが、画像は移行されません。

何が悪いのですか?

編集

migrate_plus.migration.drupal7_fruit.yml

    id: drupal7_fruit
label: "Migrate Fruit Content Type"
migration_group: drupal7
source:
  plugin: d7_node
  node_type: fruit
process:
  nid: nid
  vid: vid
  langcode:
    plugin: default_value
    source: language
    default_value: und
  title: title
  uid: node_uid
  status: status
  created: created
  changed: changed
  promote: promote
  sticky: sticky
  revision_uid: revision_uid
  revision_log: log
  revision_timestamp: timestamp
  field_descricao: field_body
destination:
  plugin: 'entity:node'
  default_bundle: fruit
  migration_dependencies:
    optional: drupal7_image

migrate_plus.migration.drupal7_image.yml

 id: drupal7_image
label: Images
migration_tags:
  - Drupal 7
source:
  plugin: d7_file
  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

コメントの @ Berdir がコメントで編集したのは、イメージまたはファイルには別の移行ファイルが必要であるにもかかわらず、イメージを移行できないとのことです。 D8サイトデータベースを復元して、すべてを最初からやり直しました。

6
Henrique Alho

Berdirの助力に感謝しますが、drupal7_fruit移行ファイルに、field_imageの値や移行の依存関係など、いくつかの情報が欠けていることに気付きました。

実用的なソリューション:

migrate_plus.migration.drupal7_image.yml

id: drupal7_image
label: Images
migration_group: drupal7
migration_tags:
  - Drupal 7
source:
  plugin: d7_file
  constants:
    source_base_path: '/var/www/username/drupal7/' # Full location of your drupal7 site
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
migration_dependencies: {}

migration_plus.migration.drupal7_fruit.yml

id: drupal7_fruta
label: "Migrate Fruit Content Type"
migration_group: drupal7
migration_tags:
  - Drupal 7
source:
  plugin: d7_node
  node_type: fruit
process:
  nid: nid
  vid: vid
  langcode:
    plugin: default_value
    source: language
    default_value: und
  title: title
  uid: node_uid
  status: status
  created: created
  changed: changed
  promote: promote
  sticky: sticky
  revision_uid: revision_uid
  revision_log: log
  revision_timestamp: timestamp
  field_description: field_body
  field_image: # Image field name in Drupal 8 site
    plugin: iterator
    source: field_photo # Image field name in Drupal 7 site
    process:
      target_id: fid
      alt: alt
      title: title
      width: width
      height: height
destination:
  plugin: 'entity:node'
  default_bundle: fruit    

migration_dependencies:
  required: 
    - drupal7_image

これが将来同じ問題を抱える人を助けることを願っています!

8
Henrique Alho

画像とファイルは独自のエンティティタイプです。ノードテーブルには、ファイルID、基本的にはエンティティ参照のみが含まれます。

最初に実行する必要がある別のファイル移行が必要です。 d7_file移行テンプレートに基づいて作成できます。

注:既存のnidとvid(およびfid)を移行する場合、D8サイトに競合するIDを持つ既存のデータがないことを確認する必要があります。そうしないと競合が発生します。それらを省略すると、コンテンツを手動で作成する場合と同様に、自動インクリメントIDが自動的に使用されます。ただし、移行プロセスプラグインを設定して、古いファイルIDを新しいファイルIDにマップする必要があります。

5
Berdir