【问题标题】:Ruby redmine svn post-commit hook is extremally slowRuby redmine svn post-commit hook 非常慢
【发布时间】:2011-06-06 13:23:31
【问题描述】:

我为 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,所有软件包的安装和测试都在同一台 PC 上进行。

【问题讨论】:

    标签: ruby windows performance svn redmine


    【解决方案1】:

    问题是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 的大多数 url 中都可以找到)。 try 部分用于确保您不会得到空记录。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-04
      • 2013-05-13
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2012-07-27
      • 2020-01-23
      • 1970-01-01
      相关资源
      最近更新 更多