为什么有时我的热部署文件消失了? (我认为阿帕奇吃了它们)

时间:2020-03-06 14:42:28  来源:igfitidea点击:

这是我的情况:

  • Windows服务器
  • 阿帕奇
  • 巡航控制

我的CruiseControl部署脚本的最后一步将内部版本复制到Apache的htdocs文件夹中的" demos"文件夹中(我相信这被称为"热部署"吗?)

一切都很好,很花花公子,除了有时(不常见,但发生的次数足以使我烦恼),demos文件夹不包含我构建的文件!旧的消失了,新的消失了,只是消失了。

我的直觉是,如果在网络上有人下载文件时尝试覆盖文件,Apache会在下载完成后将其删除吗?我不知道,这没有任何意义。

我到处看,甚至都找不到提示...让我们看看这个StackOverflow社区到底有多棒! :)

这是我的ANT脚本中的"部署"目标:

<target name="deploy" depends="revertVersionFile">
    <copy todir="${deploy.dir}">
        <fileset dir="${bin.dir}"/>
    </copy>
    <copy todir="${deploy.dir}">
        <fileset dir="${bin.dir}"/>
    </copy>
    <available file="${deploy.dir}/MockupsLive.swf" property="mockupsFile"/>
    <fail unless="mockupsFile" message="MockupsLive doesn't exist!"/>       
    <available file="${deploy.dir}/skins/sketch/sketch.swf" property="skinFile"/>
    <fail unless="skinFile" message="sketch.swf doesn't exist!"/>       
</target>

解决方案

Apache不会删除目录的内容。脚本中有一些内容正在删除,这是我的猜测。脚本是否创建任何形式的备份?也许它将内容移动到备份文件夹,然后复制构建。

我们可以为该文件夹添加一些安全性,以防止其被删除。也许然后某个地方会弹出一个错误,让我们对方便删除目录的方式有所了解。 :)我的猜测是它在脚本中。

我建议在复制新文件之前创建旧文件的备份。将旧文件命名为带有时间戳记的替换时间。这样做,然后在下次失败时查看目录中的内容,很可能会为我们提供下一步的提示。

我认为问题可能出在CruiseControl文件中。最有可能发生的事情是CruiseControl进程正在整理文件的某个位置,但是可能由于文件的锁定(可能是由Apache锁定)而无法将文件写回到该文件夹​​中。

无论哪种方式,由于"部署"似乎是最后一步,因此之前的步骤可能会清除目录,并且部署无法运行,因此在步骤结束时将文件夹保留为空。