2011-06-06 105 views
3

我使用SVN以下post-commit鉤子:紅寶石管理平臺SVN post-commit鉤子是extremally慢

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

回答

3

問題是,script/runner每次運行時都會從頭開始創建新的Rails進程,這會使您的提交暫停。所以3個提交== 3個啓動和3個關機。

有幾件事情可以做,以改善這一點:

  1. 在後臺運行腳本/亞軍的過程,因此不會減慢您的承諾。在Linux上,您可以在命令末尾添加&,但我不記得如何在Windows上執行此操作。

  2. 而不是在每次提交時獲取變更集,您可以通過cron或計劃定期運行它任務。耙子任務redmine:fetch_changesets是爲此目的而構建的,它將遍歷每個項目併爲您運行fetch_changesets

  3. 您正在運行的命令遍歷每個項目並獲取更改。如果你知道該項目的標識符,您可以更改查詢,以便它只是變得該項目您的更改工作:

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

    替換「你的項目」與項目標識符(在大多數的發現Redmine中的網址)。 try零件用於確保您不會收到空記錄。

  4. 使用Web服務獲取更改集而不是script/runner。 Web服務將使用現有的Ruby進程,因此它應該已經被加載,並且在Redmine下載並處理更改時,速度會變慢。這也可以用於第一個選項(即Web服務請求的後臺)。 Docs:http://www.redmine.org/projects/redmine/wiki/HowTo_setup_automatic_refresh_of_repositories_in_Redmine_on_commit

就個人而言,我只是每小時運行一次cronjob(#2)。使存儲庫視圖對我來說並不重要。希望這給你一些想法。