Drupal6/7升级到Drupal8(三)使用Drush执行升级


一、获取合适的Drush版本

确保你使用的是从composer或者Github获取的最新的drush。如果你使用Github版本,你仍然需要Composer下载相关的依赖。 Drupal.org/PECL/Pear/etc的Drush已经过期了。

对桌面端开发用户来说,你可以在桌面开发端通过发起一个命令提示符,运行下面的命令:[c:\your_path_to_acquia]\drush\composer global require drush/drush:dev-master 来使用composer更新drush。

检查Drush的版本drush --version

二、必要的Drupal模块

要使用Drush迁移,你需要下载并启用Migrate Upgrade模块,如果你计划做的不止一次性的升级,你需要下载migrate tools

三、简单的方法:使用 migrate-upgrade

迁移工具将添加 drush迁移的命令,比如drush migrate-staus(ms) 以及migrate-import(mi).如果你启用这个模块并运行drush migrate-status 而没有通过migte upgrade 模块做任何动作,你不会看到任何可用的迁移在运行。

这是因为独特的迁移被基于你设置的源数据动态地创建。只要Migrate 不知道使用的源,就不会有迁移被创建。

为了解决这个问题,我们使用migrate upgrade 模块,migrate upgrade 模块来自Drush命令 drush migrate-upgrade.这个模块做两件事情:

1)它将为你的网站生成迁移,基于你配置的源网站,比如,如果book 模块在你的Drupal6和Drupal8网站同时被启用,D6的book 迁移会被创建。

2)它通过依赖顺序,执行每一个创建的迁移。

尽管如此,为了更多的控制,你可能想通过--configure-only选项,这样,他只执行第一步的创建迁移。

drush migrate-upgrade --legacy-db-url=mysql://user:password@server/db --legacy-root=http://mydrupal6site.com --configure-only

加上configure-only 参数运行drush迁移Drupal后,你可以运行drush migrate-status 来列出可能执行的迁移。这时,你可以概览或者选择实行某些迁移。drush migrate-import {migrate name} 可以被用来分别执行他们,或者drush migrate-import --all 执行整个列表。

四、复杂的方法:使用 migrate-manifest

也可以通过一个manifest文件来设置一个特殊的迁移设置。这个让你可以以重复的方式运行成组的迁移。使用这种方法,你需要migrate manifest模块,当你有所有单元的设置,你可以通过运行drush config-list|grep migrate 得到全部可用的迁移。

这时,你需要创建一个可用的yaml文件,它看起来像下面的代码例子。你只需列出你需要的部分,你需要添加迁移来解决所有依赖,迁移能够被列出来,迁移将基于依赖为他们排序。

# user
- d6_user
- d6_user_profile_field
- d6_user_profile_field_instance
- d6_user_profile_entity_display
- d6_user_profile_entity_form_display
- d6_profile_values:user
- d6_filter_format
- d6_user_role
- d6_user_picture_entity_display
- d6_user_picture_entity_form_display
- d6_user_picture_file
- d6_user_picture_field
- d6_user_picture_field_instance
# taxonomy
- d6_taxonomy_vocabulary
- d6_taxonomy_settings
- d6_taxonomy_term
# nodes
- d6_node
- d6_node_revision
- d6_node_type
- d6_view_modes
- d6_filter_format
- d6_field_instance_per_form_display
- d6_field_instance_widget_settings
- d6_field_formatter_settings
- d6_field_instance
- d6_field
- d6_field_settings
- d6_node_settings
- d6_cck_field_values:*
- d6_cck_field_revision:*
# taxonomy fields
- d6_term_node_revision
- d6_term_node
- d6_vocabulary_entity_display
- d6_vocabulary_entity_form_display
- d6_vocabulary_field_instance
- d6_vocabulary_field
# blocks
- d6_block
- d6_menu
# custom blocks
- d6_custom_block
- d6_filter_format
# book
- d6_book
- d6_book_settings
# file migrations are configurable, see https://www.drupal.org/node/2257723
- d6_file:
  source:
  conf_path: sites/assets
  destination:
  source_base_path: destination/base/path
  destination_path_property: uri