1

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

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

完成此任务的最简单方法是什么

最好的解决方案是 Apache 配置,最好是完全在.htaccess文件中;如果做不到这一点,一个轻量级的 Web 服务器已经具有这样的功能;或者可以通过编程来做到这一点。


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

  • 这是仅限客户端的开发——提供的文件才是最重要的,而且构建可能非常轻量级(例如,将一组文件复制到目标目录布局中,或者将一些 .js 文件打包到单个文件中) . 此外,文件通常会在每个编辑和重新加载周期加载一次 - 因此交互式响应时间不是优先事项。
  • 假设构建系统完全了解相关的依赖关系——如果没有任何改变,就不会发生重建。
  • 如果尽管如此,它仍然非常缓慢,我肯定会放弃这个想法并寻找其他方法来改进我的工作流程 - 但我至少想试一试。
4

3 回答 3

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。

于 2012-11-28T16:30:36.687 回答
0

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

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

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

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

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

可以像这样在 shell-script 中访问参数:

#!/bin/bash
cd /var/www/$1
make $2
于 2013-02-16T16:26:27.857 回答
-1

这似乎是一个非常糟糕的主意。您将为等待“制作”完成的每个请求添加大量延迟。在开发环境中还可以,但在生产环境中,您会降低性能。

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

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

于 2012-11-28T01:15:29.300 回答