Ruby redmine svn post commit钩子非常慢

Ruby redmine svn post commit钩子非常慢,ruby,windows,performance,svn,redmine,Ruby,Windows,Performance,Svn,Redmine,我为svn使用以下提交后钩子: "path\to\ruby.exe" "path\to\redmine\script\runner" "Repository.fetch_changesets; Rails.logger.flush" -e production 它工作正常,但大约需要1-2分钟。 我还认为第一次提交需要很多时间,但后续提交需要相同的时间 有可能改善这种行为吗 我知道Ruby在Windows上的缓慢行为,大约3次,但在我的例子中,它要长得多 配置如下:Windows Vista、

我为svn使用以下提交后钩子:

"path\to\ruby.exe" "path\to\redmine\script\runner" "Repository.fetch_changesets; Rails.logger.flush" -e production
它工作正常,但大约需要1-2分钟。 我还认为第一次提交需要很多时间,但后续提交需要相同的时间

有可能改善这种行为吗

我知道Ruby在Windows上的缓慢行为,大约3次,但在我的例子中,它要长得多


配置如下:Windows Vista、redmine 1.1.1、Ruby 1.8.7和RubyGems 1.8.7,所有安装和测试的软件包都在同一台电脑上执行。

问题是,
script/runner
每次运行新的Rails进程时都会从零开始启动,这会使您的提交暂停。因此,3次提交=3次启动和3次关闭

您可以做一些事情来改善这一点:

  • 在后台运行脚本/运行程序进程,这样不会减慢提交速度。在Linux上,您可以通过在命令末尾添加一个
    &
    来实现这一点,但我不记得如何在Windows上实现这一点

  • 您可以通过cron或计划任务定期运行变更集,而不是在每次提交时获取变更集。rake任务
    redmine:fetch\u changesets
    就是为此而构建的,它将迭代每个项目,并为您运行
    fetch\u changesets

  • 您正在运行的命令将遍历每个项目并获取更改。如果您知道项目标识符,则可以更改查询,使其仅获取您正在处理的项目的更改:

    script\runner“Project.find('your-Project')。try(:repository)。try(:fetch\u changesets);Rails.logger.flush”

    将“您的项目”替换为项目标识符(可以在Redmine中的大多数URL中找到)。
    try
    部分用于确保不会得到空记录

  • 使用web服务获取变更集,而不是
    script/runner
    。web服务将使用一个现有的Ruby进程,因此它应该已经被加载,唯一的减速将是Redmine下载和处理更改。这也可用于第一个选项(即后台web服务请求)。文件:

  • 就个人而言,我只是每小时运行一个cronjob(#2)。让存储库视图处于当前状态对我来说并不重要。希望这能给你一些想法