tractorcow / silverstripe-legacyimport
将旧版2.4站点导入到3.1
Requires
- silverstripe/cms: ~3.1
- silverstripe/framework: ~3.1
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');