如何让我的Web服务器自动重建它所服务的文件?

时间:2012-11-28 01:06:26

标签: apache webserver build-automation

我有时会编写仅限客户端的Web应用程序,而且我喜欢简单快速的开发周期。这导致我明确没有构建步骤的项目布局,因此我可以只编辑源文件,然后在Web浏览器中重新加载。放置在设计上并不总是一个健康的约束。因此,我希望在开发环境中使用以下功能:

每当服务器收到GET /foo/bar请求并将其转换为文件/whatever/foo/bar时,它会在读取文件之前执行cd /whatever && make foo/bar

最简单的方法是什么?

最佳解决方案形式是Apache配置,最好是完全在.htaccess个文件中;失败了,一个已经具有这种功能的轻量级Web服务器;或者可以编程的一个。


由于我吸引了很多“不要那样做”的回应,所以让我向你保证几点:

  • 这是仅客户端开发 - 所服务的文件都很重要,而且构建可能非常轻量级(例如,将一组文件复制到目标目录布局中,或将一些.js文件打包到一个单个文件)。此外,每个编辑和重新加载周期通常会加载一次文件 - 因此交互响应时间不是优先事项。
  • 假设构建系统完全了解相关依赖项 - 如果没有任何更改,则不会进行重建。
  • 如果尽管如此,如果事实证明是不切实际的慢,我肯定会放弃这个想法,并找到其他方法来改善我的工作流程 - 但我想至少尝试一下。

3 个答案:

答案 0 :(得分:1)

您可以使用http://aspen.io/

假设makefile做了一些魔术,你可以做一个简单的做法:

import subprocess
RESULTFILE = "/whatever/foo/bar"
^L
subprocess.call(['make'])
response.body = ''.join(open(resultfile).readlines())
^L

但如果它不那么神奇,你当然可以将构建过程编码为simplate本身(使用https://code.google.com/p/fabricate/之类的东西)并完全摆脱makefile。

答案 1 :(得分:0)

由于我是一个懒惰的草皮,我建议这样的事情:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)\/(.*)(/|)$ /make.php?base=$1&make=$2 [L,NC]

这样的正则表达式模式提供了两个必需参数 -

然后可以通过PHP函数exec()传递给shell脚本:

您可能需要在模式或包含上方添加排除项到模式, 例如,通过单词定义第一个反向引用 - 否则它也会匹配其他请求(不应该重写)。

可以在shell脚本中访问参数:

#!/bin/bash
cd /var/www/$1
make $2

答案 2 :(得分:-1)

这似乎是一个非常糟糕的主意。您将为等待“make”完成的每个请求添加大量延迟。在一个没有问题的开发环境中,但在生产环境中,你会破坏性能。

那就是说,你可以编写一个简单的apache模块来处理这个: http://linuxdocs.org/HOWTOs/Apache-Overview-HOWTO-12.html

我仍然建议考虑这是否是你想做的。在开发过程中,您知道是否更改了需要重新制作的文件。在生产中它是一个性能杀手。