tractorcow/silverstripe-legacyimport

将旧版2.4站点导入到3.1

安装: 184

依赖关系: 0

建议者: 0

安全性: 0

星标: 3

关注者: 2

分支: 1

公开问题: 4

类型:silverstripe-module

dev-master / 1.0.x-dev 2018-04-05 21:29 UTC

This package is auto-updated.

Last update: 2024-09-20 16:24:32 UTC


README

将您的2.x站点导入到3.x!

设置数据库凭据

您需要在_ss_environment.php文件中设置以下内容,以便指向旧站点的数据库

  • SS_REMOTE_DATABASE_SERVER
  • SS_REMOTE_DATABASE_USERNAME
  • SS_REMOTE_DATABASE_PASSWORD
  • SS_REMOTE_DATABASE_NAME
  • SS_REMOTE_DATABASE_CLASS (可选,默认为MySQLDatabase)
  • SS_REMOTE_DATABASE_PORT (可选)
  • SS_REMOTE_DATABASE_SCHEMA (可选)
  • SS_REMOTE_DATABASE_TIMEZONE (可选)
  • SS_REMOTE_DATABASE_PATH (可选)

运行导入程序

您可以使用以下命令作为开发任务运行

./framework/sake dev/tasks/LegacyImportTask flush=all

导入本身由几个步骤组成,每个步骤专注于导入单个对象类型。

实际的导入本身被分解为几个遍历,在每次遍历中,每个步骤都调用不同方法。例如,如果您的导入配置如下所示

---
Name: mylegacyimport
---
LegacyImportTask:
  tasks:
    - importer: DataObjectImporter
      class: Group
      # Don't update groups, but identify links
      strategy:
        - Identify
      # Identify matching groups by code
      idcolumns:
        - Code
    - importer: SiteTreeImporter
      # Just import top level pages, but don't try to update pages with existing url segments
      strategy:
        - Add
        - Update
      class: ForumHolder
      where:
		- '"ParentID" = 0'
    - importer: DataObjectImporter
      class: Member
      strategy:
        - Add
        - Identify
      idcolumns:
        - Email

实际过程将执行以下任务

  • 识别组
  • 识别页面
  • 识别成员
  • 导入页面(添加或更新)
  • 导入成员(仅添加新的)
  • 链接页面关系
  • 链接成员关系

运行任务组

如果您想设置不同的任务组运行,只需将配置中的'tasks'替换为另一个键,并使用tasks=mytasks查询字符串参数代替。

---
Name: mylegacyimport
---
LegacyImportTask:
  fixpermissions:
    - importer: DataObjectImporter
      class: Group
      strategy:
        - Update

可以使用以下命令运行。

./framework/sake dev/tasks/LegacyImportTask flush=all tasks=fixpermissions

仅运行单个遍历

如果您想运行单个遍历,可以使用'pass'参数跳到其中。

./framework/sake dev/tasks/LegacyImportTask flush=all pass=identify

警告:某些步骤可能依赖于前置识别,如果前置步骤未完成,请不要在较晚步骤开始导入。

遍历如下

identify

根据指定的标准,从远程对象中选择并与所有本地对象进行比较。然后创建所有已识别对象的映射。

import

创建所有对象(如果允许)或更新(如果允许)。只要所有必要的相关对象都可用,并且已在先前任务中识别,一些关系将被连接(has_one)。

link

运行最终的检查所有对象任务,以连接许多_many关系和任何其他未完成的has_ones。

导入器

以下为以下导入器和它们支持的策略

DataObjectImporter

这是一个基本的导入器,可以导入几乎所有对象。

您可以使用以下策略之一或多个

  • Add - 如果本地不存在新对象,则添加。如果没有使用识别执行添加,则不需要使用idcolumns,因为不会进行比较。
  • Identify - 确定本地和远程对象之间的任何映射。此遍历将使用'idcolumns'配置来识别对象之间的匹配。请注意,如果您使用关系(例如,ParentID),则要注意对象可能在不同数据库中具有不同的ID。如果使用ParentID = 0作为过滤器,则这是可以接受的。
  • 更新 - 如果找到记录,则会更新。它不能单独工作,因为它需要在该任务相同或之前任务中包含“识别”或“添加”。如果与“识别”一起使用,它将更新所有匹配的记录。如果与“添加”一起使用,它将更新所有最初添加但自上次导入以来已更改的记录。

AssetImporter

此导入器将资产加载到您的网站,并且只有两种特定的策略。

预加载

所有资产在同步之前将下载到本地服务器的临时目录中。

对于资产传输,也请指定要使用的适当rsync或scp命令。您还需要设置下载资产的保留目录,该目录应位于您的webroot之外。

rsync命令(首选)

define(
	'SS_REMOTE_SYNC_COMMAND',
	'rsync -rz -e \'ssh -p 2222\' --progress someuser@192.168.0.54:/sites/myoldsite/www/assets /sites/mynewsite/importedfiles'
);

scp命令(如果不可用rsync)

define(
	'SS_REMOTE_SYNC_COMMAND',
	'scp -rP 2222 someuser@192.168.0.54:/sites/myoldsite/www/assets /sites/mynewsite/importedfiles'
);

在执行上述命令后,指定资产目录的位置。

define('SS_REMOTE_SYNC_STORE', '/sites/mynewsite/importedfiles/assets');

按需

文件将在需要时下载。您必须定义远程网站根来确定此操作。

define('SS_REMOTE_SITE', 'http://www.myoldsite.com');