Php Drupal:项目结束后切换站点域的最佳实践

Php Drupal:项目结束后切换站点域的最佳实践,php,drupal,subdomain,lamp,transfer,Php,Drupal,Subdomain,Lamp,Transfer,我在lamp(debian、apache、php、mysql)服务器上运行Drupal多站点环境 我当前的新项目工作流程是: 在我的公司网站上激活一个子域(假设项目是foo.com,我激活foo.example.com) 由于普莱斯克(这有点不友好),我的步骤是: 在plesk中创建新的子域,php在fastcgi模式下运行 创建数据库 删除httpdocs文件夹,重新创建它并创建sites文件夹 将每个文件简单链接到/var/www/vhosts/drupal文件夹(drupal代码库)中,包

我在lamp(debian、apache、php、mysql)服务器上运行Drupal多站点环境

我当前的新项目工作流程是:

  • 在我的公司网站上激活一个子域(假设项目是foo.com,我激活foo.example.com)
  • 由于普莱斯克(这有点不友好),我的步骤是:
  • 在plesk中创建新的子域,php在fastcgi模式下运行
  • 创建数据库
  • 删除httpdocs文件夹,重新创建它并创建sites文件夹
  • 将每个文件简单链接到
    /var/www/vhosts/drupal
    文件夹(drupal代码库)中,包括站点和tmp文件夹、robots.txt和.htacces文件(通常根据域进行自定义)
  • 将文件夹
    foo.example.com
    置于
    sites
    内,符号链接至
    /var/www/vhosts/drupal/sites/all
    文件夹,然后将符号链接从
    sites/foo.com
    返回至
    /var/www/vhosts/drupal/sites/foo.example.com
    (为了让drush看到一些多站点任务的所有域,比如crontab)
  • 在子域中安装、配置drupal,完成项目所需的一切工作
  • 此时,我需要将项目从子域切换到最终域foo.com,该域也将驻留在我的服务器上

    我不太喜欢域重定向之类的其他黑客,我希望最终的项目是“干净的”(在多站点环境中,干净意味着什么)

    实际上,我是这样做的:

  • 创建域(通过plesk)和数据库
  • 将子域httpdocs复制到完整域httpdocs(
    cp-a/var/www/vhosts/example.com/subdomains/foo/httpdocs/var/www/vhosts/foo.com/httpdocs
  • 更改httpdocs的所有者和组以匹配域的所有者和组
  • 登录drupal,更改webiste信息和文件系统路径
  • 这让我可以做我想做的事情,但我对节点的html内容有一些问题;特别是对于那些包含链接、图像和文件的内容,这些内容(即使IMCE配置为使用相对路径)将指向
    /sites/foo.example.com/files/[…]
    而不是
    /sites/foo.com/files/[…]
    。cck文件字段也会发生这种情况

    正如我所说,我需要一个干净的解决方案,我知道我可以制作一个从
    /sites/foo.example.com
    /sites/foo.com
    的符号链接,但我真的不喜欢这种方式

    到目前为止,我尝试搜索/替换数据库sql转储中的所有事件:

    sed 's/foo.example.com/foo.com/g' dump.sql > foo.com.sql
    
    但这似乎阻止了一些事情;我在boostrap文件中(在缓存取消序列化步骤中,即使我在db导出/导入之前和之后清除了所有缓存)出现了许多错误,看起来有些utf-8编码被破坏了

    我知道最好的办法是在本地服务器上设置开发区,但我需要我的客户从外部到达。而且我们的adsl情况(静态IP等)有点有线

    有什么想法吗


    p、 s:很抱歉我的英语不好,如果我的问题不清楚,请让我知道,我会提供更多细节)

    您的步骤基本上就是我所做的,但我没有使用Plesk或进行多站点安装。我只是在一个VPS实例中创建一个新的vhost,cp-a是docroot,然后重新配置一个新的数据库DSN

    关于SQL问题,我通常在UTF-8干净编辑器中编辑SQL转储以防止该问题。在Windows上,我使用记事本++

    然后我恢复数据库,清理所有缓存,编辑设置,并运行cron。我通常还会重建搜索索引

    这个序列正常工作


    引导问题可能与变量表有关。当您序列化一个字符串(或带有字符串的内容)时,也会存储长度。我将进行搜索和替换,然后打开MySQL查询浏览器,在带有域名的变量表中搜索行,并手动固定长度。另一个选项是确定存储哪个选项,然后重新创建设置。

    关于使用编辑器打开sql转储:我的转储可能约为20Mb,使用编辑器很难做到这一点。FWIW,NP++将处理大型sql转储。我最近编辑了一个大约20Mb的文件,我相当肯定我使用过更大的文件。禁用语法突出显示有帮助。您还可以使用SQL更新数据库中的数据。由于您使用的是PLESK,我假设您有PhpMyAdmin,它有工具可以一次搜索每个表。此外,请尝试通过SQL查询而不是使用Drupal的工具删除缓存。@Ted:我有PLESK,但我从未见过将字符串搜索到所有表中的工具;可以满足我的需要,即使我更喜欢通过命令行来完成。要通过sql删除缓存,我需要截断哪些表?(发布我们自己的答案!)