背景:
每次發布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本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...