我想将一些处于生产形式的 HTML 文件 rsync 到 Web 服务器。要使它们处于生产形式,我必须在脚本标记中插入“.production”字符串。我可以使用以下 sed 命令执行此操作:
sed 's/steal\.js/steal\.production\.js/g' */*.html
我知道我可以-i
就地 sed 并 rysync 这些文件,然后-i
在完成后将它们返回,但我希望能够执行类似 rsync 标准输出到远程计算机上的目标文件的操作。这样我就不需要担心由于在传输过程中取消脚本而损坏我的 html 文件。
关于如何解决这个问题有什么建议吗?
答案1
如果您有一点空闲磁盘空间(现在很便宜,对吧?),您可以在开发盒上从开发树到项目的第二个副本(“临时”树)进行本地 rsync 。然后在登台树上执行所需的任何生产修改,并从登台树到生产服务器进行“真正的”rsync。
您可以保留临时树以获得额外的部署速度,或者随后将其删除以释放空间;由你决定。
或者,您可以将临时树保留在生产服务器上。在这种情况下,您可以只执行一次 rsync,进行更改,然后执行一些快速目录重命名,以便登台树现在是生产树,而旧的生产树现在是登台树。这样,您就永远不会在生产中拥有部分更新的网站。
答案2
我建议您应该考虑删除必须访问开发和生产盒子上不同文件名的黑客行为。
- 您可以使用版本控制来保留同一项目的开发和生产分支。继续将开发合并到生产分支中,但在提交该分支之前使用小脚本将代码保持在生产状态。使用您的服务器检查生产分支,或者仅 rsync 该分支。
- 您可以使用一些服务器端代码来决定使用哪个文件名:
if (hostname = productionserver) ...
- 您可以使用服务器端重定向,根据主机名或项目内的某种标记文件在同一请求 url 下提供不同的文件。