Ruby redmine svn 提交后 Hook 非常慢

标签 ruby windows performance svn redmine

我为 svn 使用以下提交后 Hook :

"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 上执行。

最佳答案

问题是 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. 使用网络服务代替 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)。使存储库 View 保持最新对我来说并不重要。希望这能给您一些想法。

关于Ruby redmine svn 提交后 Hook 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6252657/

相关文章:

windows - 将文件拖放到 Visual Studio 中不起作用

c++ - Windows SDK 是否限制符合条件的 Windows 版本?

performance - "Run Thread Groups consecutively"如何影响 setUp/teardown 线程组

javascript - 如何使用覆盖有效地突出显示鼠标光标下的元素?

ruby-on-rails - rails text_field 标签内的条件检查

ruby - 使用 gsub() 转义 "$"

ruby-on-rails - 为什么我会收到此 'can' t modify frozen hash' 错误?

c++ - OpenCV 和 Qt VideoCapture 无法在 Windows 上打开正确的摄像头

c - 使用 Fiddle 将 RUBY 数组传递到 C DLL

javascript - 在 Javascript 中,是一堆小的 setInterval 循环还是一个大循环更快?