我有时会编写仅限客户端的Web应用程序,而且我喜欢简单快速的开发周期。这导致我明确没有构建步骤的项目布局,因此我可以只编辑源文件,然后在Web浏览器中重新加载。放置在设计上并不总是一个健康的约束。因此,我希望在开发环境中使用以下功能:
每当服务器收到GET /foo/bar
请求并将其转换为文件/whatever/foo/bar
时,它会在读取文件之前执行cd /whatever && make foo/bar
。
最简单的方法是什么?
最佳解决方案形式是Apache配置,最好是完全在.htaccess
个文件中;失败了,一个已经具有这种功能的轻量级Web服务器;或者可以编程的一个。
由于我吸引了很多“不要那样做”的回应,所以让我向你保证几点:
答案 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
我仍然建议考虑这是否是你想做的。在开发过程中,您知道是否更改了需要重新制作的文件。在生产中它是一个性能杀手。