使用Phing的Drupal文件迁移脚本

前几天,我需要将一个Drupal项目从我的源文件夹复制到另一个文件夹,因此,我决定手动创建一个Phing脚本,而不是手动复制这些文件,而不是手动复制这些文件。此Phing脚本会将您的Drupal项目导出到另一个目录,更改数据库凭据并创建该项目的zip和tar文件。首先要做的是创建一个属性,这是该文件的内容。

drupal.destination.database.host=externalhost
drupal.destination.database.database= drupaldatabase
drupal.destination.database.password=password
drupal.destination.database.username=username
drupal.destination.database.prefix=dru_
 
drupal.destination.database.url=mysql://${drupal.destination.database.username}:${drupal.destination.database.password}@${drupal.destination.database.host}/${drupal.destination.database.database}
 
drupal.source.directory=D:/drupal/
drupal.source.name=MyDrupalProject
 
drupal.destination.directory=D:/${drupal.source.name}/
drupal.destination.compressedfile=${drupal.source.name}

只需将此文件另存为build.properties并将属性更改为所需的设置即可。

的构建文件部分包含一个文件集,该文件集包含所有需要的文件,然后包含一些用于处理这些文件的目标。那些曾经使用过Phing和Drupal的人会注意到,我们包含了很多文件,但缺少一个名为settings.php的文件。这是故意的,因为尝试将build.properties文件中的参数匹配到文件中的数据库设置settings.php会很棘手。因此,我们不必输入多个数据库参数,而只需使用目标参数,default.settings.php文件(我们将知道其格式)和少量正则表达式替换即可settings.php为目标创建一个新文件。这是构建文件的内容。

<?xml version="1.0"?>
<project name="DrupalExport" default="main">
    <!-- Include properties file. -->
    <property file="build.properties" />
 
    <fileset dir="${drupal.source.directory}" id="DrupalFiles">
        <include name="cron.php" />
        <include name="index.php" />
        <include name="install.php" />
        <include name="robots.txt" />
        <include name="update.php" />
        <include name="xmlrpc.php" />
        <include name=".htaccess" />
        <include name="scripts/**" />
        <include name="themes/**" />
        <include name="misc/**" />
        <include name="modules/**" />
        <include name="profiles/**" />
        <include name="includes/**" />
        <include name="sites/all/**" />
        <include name="sites/default/files/**" />        
        <include name="sites/default/default.settings.php" />
    </fileset>
 
    <target name="prepare">
        <!-- Reset the permissions on thesetttings.phpfile so we can delete it. -->
        <exec command="php -r &quot;var_dump(chmod('${drupal.destination.directory}sites/default/settings.php', 0777));&quot;" />      
        <!-- Delete the destination directory. -->
        <delete dir="${drupal.destination.directory}" />
        <echo>Prepare complete.</echo>
    </target>
 
    <target name="copyFiles" depends="prepare">
        <copy todir="${drupal.destination.directory}" overwrite="false" tstamp="false">
            <fileset refid="DrupalFiles" />
        </copy>
        <echo>copyFiles complete</echo>
    </target>
 
    <target name="drupalDatabaseConnection" depends="copyFiles">
        <copy file="${drupal.source.directory}/sites/default/default.settings.php"
            tofile="${drupal.destination.directory}/sites/default/settings.php"
            overwrite="true">
            <filterchain>            
                <replaceregexp>
                    <!-- Add some rules to replace settings with real values. -->
                    <regexp pattern="\$db_url = 'mysql:\/\/username:password\@localhost\/databasename';" replace="\$db_url = '${drupal.destination.database.url}';"  ignoreCase="true"/>
                    <regexp pattern="\$db_prefix = '';" replace="\$db_prefix = '${drupal.destination.database.prefix}';" ignoreCase="true"/>
                </replaceregexp>
            </filterchain>         
        </copy>
        <!-- Makesettings.phpreadonly -->
        <exec command="php -r &quot;var_dump(chmod('${drupal.destination.directory}sites/default/settings.php', 0444));&quot;" />          
        <echo>drupalDatabaseConnection complete</echo>
    </target>
 
    <target name="zipFiles" depends="drupalDatabaseConnection">
        <fileset dir="${drupal.destination.directory}" id="DestinationFiles">
            <include name="**" />
        </fileset>
        <!-- Delete original file. -->
        <delete file="${drupal.destination.compressedfile}.zip" />        
        <zip destfile="${drupal.destination.compressedfile}.zip">
            <fileset refid="DestinationFiles" />
        </zip>
        <echo>zipFiles complete</echo>    
    </target>
 
    <target name="tarFiles">
        <fileset dir="${drupal.destination.directory}" id="DestinationFiles">
            <include name="**" />
        </fileset>
        <!-- Delete original file. -->        
        <delete file="${drupal.destination.compressedfile}.tar" />          
        <tar destfile="${drupal.destination.compressedfile}.tar" compression="gzip">
            <fileset refid="DestinationFiles" />
        </tar>
        <echo>tarFiles complete</echo>    
    </target>    
 
 
    <target name="main">
        <phingcall target="copyFiles" />
        <phingcall target="zipFiles" />
        <phingcall target="tarFiles" />
 
        <echo>Export finished!</echo>
    </target> 
</project>

要运行此脚本,请将此xml保存到名为drupalexport.xml的文件中,使用以下命令来运行它。

phing -f drupalexport.xml

现在,您将拥有一个包含您的Drupal项目的目录,以及一个包含上面目录中的相同文件的zip和tar文件。