Ruby redmine svn post-commit hook非常慢

时间:2011-06-06 13:23:32

标签: ruby windows performance svn redmine

我对svn使用以下post-commit钩子:

"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,带有RubyGems 1.8.7的Ruby 1.8.7,安装和测试的所有软件包都在同一台PC上执行。

1 个答案:

答案 0 :(得分:3)

问题是script/runner每次运行时都会从头开始一个新的Rails进程,这将使你的提交暂停。所以3次提交= = 3次初创公司和3次停工。

您可以采取一些措施来改善这一点:

  1. 在后台运行脚本/运行程序进程,这样就不会减慢提交速度。在Linux上,您可以通过在命令末尾添加&来执行此操作,但我不记得如何在Windows上执行此操作

  2. 您可以通过cron或计划任务定期运行它,而不是在每次提交时获取更改集。 rake任务redmine:fetch_changesets是为此目的而构建的,它将遍历每个项目并为您运行fetch_changesets

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

    script\runner "Project.find('your-project').try(:repository).try(:fetch_changesets); Rails.logger.flush"

    将'your-project'替换为项目标识符(在Redmine的大多数网址中找到)。 try部分用于确保您没有空记录。

  4. 使用网络服务获取更改集而不是script/runner。 Web服务将使用现有的Ruby进程,因此它应该已经加载,并且只有在Redmine下载并处理更改时才会减慢速度。这也可以与第一个选项一起使用(即后台Web服务请求)。文档:http://www.redmine.org/projects/redmine/wiki/HowTo_setup_automatic_refresh_of_repositories_in_Redmine_on_commit

  5. 就个人而言,我每小时都会跑一个cronjob(#2)。让Repository视图保持最新对我来说并不重要。希望这会给你一些想法。