結合ruby寫的乙個校驗工具

2021-08-27 09:26:15 字數 2749 閱讀 3532

背景:

每次發布detail這邊一般都要發布多個js檔案,然後同步到不同的cdn;現階段cdn有提供乙個平台,前端在發布js後可以根據js的檔名來逐個校驗下每個js是否同步到每乙個cdn節點,但在有多個js發布的時候,可能不能逐一校驗,detail這邊有出現發布js後同步到個別的***節點同步失敗,所以考慮用乙個簡便的方式來執行;

大致流程:

通過svn的命令拿到每次js發布的檔名,然後根據檔名在cdn同步校驗平台上檢測是否同步到每個cdn節點,如果同步失敗返回資訊;

具體步驟:

1、通過命令拿到每次要發布的js檔案資訊,這些資訊包含 版本號、時間、提交者、檔名,將這些資訊定向到乙個xml檔案

2、解讀xml檔案,根據提交者的名字查詢該使用者修改發布的檔名,將檔名轉換成陣列的元素

3、將陣列中的每個檔名在cdn校驗平台上逐一校驗,並返回資訊;

下面是具體實現方式:

本機除錯:

執行cmd執行

如果執行上述的命令有輸出相應的內容則請忽略下面的內容,如果提示svn不是外部內部命令時請看下面:

q1:svn 不是有內部或外部命令,也不是可執行的程式或批處理檔案。

現場:cmd內輸入svn顯示:不是有內部或外部命令,也不是可執行的程式或批處理檔案。、

本機已安裝svn

解決方案:

需要安裝subversion,傳送門:subversion,xp裝32位  win 7-64位 .

安裝好對應的subversion後,重新執行執行輸出結果;

由於需要拿到更新檔案的檔名以及所在的路徑資訊,所以可以嘗試使用svn引數,在這裡可以嘗試下:

--quiet --verbose 引數加入後,輸出資訊將會輸出更新檔案的概要資訊;

再將檔案定向到乙個xml檔案(這裡可以是其它字尾的檔案,定義成xml是為了後面讀取方便),繼續加引數:

在ruby中:

def svn_log(start_date)

#reversion --

timespan = " --revision head:}"

puts timespan

#url中對應的目錄是可更改的

#將更新的檔案重定向到乙個檔案中 可以csv 也可以xml

#引數說明--quiet 檢視程式的版本號不會列印日誌資訊正文本身;--verbose引數表示顯示詳細資訊;

`svn log # # --quiet --verbose --xml >updatw_file.xml`

# puts `svn log # #`

puts 'done,已將修改的檔案重定向到乙個xml檔案中'

end

那麼到這裡,我們第一步通過svn拿到前端要發布的檔案資訊了;

#將檔案轉換成to_string的形式

v3 = v1.to_s

#將以js 或者css結尾時自動的換取行

v4=v3.gsub(/js/,'js

').gsub(/\.css/,'.css

').gsub(/vm/,'vm

#.gsub(/\.txt/,".txt

#") #將輸出的檔名稱轉換成陣列形式 然後去重

arr = v4.to_a.uniq

puts " 檔案更新列表:"感興趣的還可以了解下sub或者gsub方法來進行替換的區別,他們兩個方法第乙個引數都是接受正規表示式。其中,sub方法替換掉第乙個匹配的地方,而gsub方法替換掉左右匹配的地方,所以這裡選擇用gsub;

第二步實現方式就這麼多了,在這過程中有遇到下面的兩情況,最終通過查閱些資料和時間,選擇了使用xpath.match

q2:xpath

**不是直接的arr = io.readlines(%%1)  #"myfile" 因為不需要太多的內容,我們只需要獲取部分內容

q3:# #  xml解析

#沒有選取

#doc = document.new(file.open("my.xml"))

#doc.elements.each("log/logentry/paths"){  |elem|

# puts elem.attributes["path"]

#  puts "start"

第三步:將陣列中的檔名放到cdn校驗平台逐一校驗

校驗平台:  

這裡是直接的將檔名以及路徑拼接到校驗平台後的方式來實現:

#訪問到檢視頁面

#將更新的檔案拼到url中,然後檢測更新的檔案是否被同步到每個節點

for $i in 0...(arr.size()-1) do

# 拼接url

urla=""+arr[$i].to_s

ie.goto(url+"?path="+urla)

然後校驗頁面的返回資訊,根據返回資訊作出相應的操作;

用Ruby寫第乙個程式

安裝了個ruby193,寫了第乙個ruby程式,來記錄下自己學習點滴。首先在ruby的新建個資料夾sample,再新新增個檔案,名字helloworld.rb 內容就是 puts hello,world 當然也可以先宣告變數,如後再用puts語句 a hello,world puts a當然也可以先...

Qt5 9 寫的乙個crc校驗例子

介面如下圖 介面很簡單 從網上隨便找了個crc8 crc16 crc32演算法直接加進去了,想實現其他演算法的自己新增就可以了 main就不介紹了,介面 乙個textedit commbox pushbutton lineedit 就這幾個控制項 通過訊號槽判斷選中的演算法然後 pushbutton...

python寫乙個服務 Python寫乙個服務

coding utf 8 import json from urllib.parse import parse qs from wsgiref.server import make server 定義函式,引數是函式的兩個引數,都是python本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...