国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Ruby > 正文

淺談Ruby on Rails下的rake與數(shù)據(jù)庫(kù)數(shù)據(jù)遷移的實(shí)例演示

2020-02-24 15:39:28
字體:
供稿:網(wǎng)友

不知道大部分程序員是否有將數(shù)據(jù)遷移到文件的經(jīng)驗(yàn),我相信現(xiàn)在很多新手都這樣做過了,事實(shí)上,這樣的實(shí)踐會(huì)逐漸給你帶來一些不必要的麻煩,本文是武林技術(shù)頻道小編整理的淺談Ruby on Rails下的rake與數(shù)據(jù)庫(kù)數(shù)據(jù)遷移的實(shí)例演示。

一般認(rèn)為db/migrate文件夾里的內(nèi)容是關(guān)于你數(shù)據(jù)庫(kù)Schema的演變過程,每個(gè)新的開發(fā)或線上環(huán)境都要通過這些Migration來構(gòu)建可用的數(shù)據(jù)庫(kù)。但如果這里裝入了,負(fù)責(zé)細(xì)節(jié)的業(yè)務(wù)代碼,比如一些歷史遺留數(shù)據(jù)的遷移代碼之類的,當(dāng)一段時(shí)間后,數(shù)據(jù)庫(kù)的結(jié)構(gòu)變化了,但Migration沒有跟著變化,漸漸的曾經(jīng)的輔助代碼,就成了垃圾代碼,不僅不能幫忙構(gòu)建環(huán)境,還會(huì)讓rake db:migrate的執(zhí)行過程異常中斷,無形中增加了新環(huán)境的構(gòu)建成本。

所以正確的做法應(yīng)該是,Migration只負(fù)責(zé)Schema相關(guān)的事宜,而不該過問數(shù)據(jù)的細(xì)節(jié),具體的數(shù)據(jù)細(xì)節(jié),全部交由rake任務(wù)來做,并且這些rake任務(wù)也不是一成不變的,隨著時(shí)間的推移它們也會(huì)廢棄掉,但因?yàn)樗鼈兣c系統(tǒng)的其它部分不想管,所以直接刪掉即可。不過使用Rake做數(shù)據(jù)遷移也是有講究的,具體如下:

Bad Rake Task

ruby;"># lib/tasks/temporary/users.rakenamespace :users do task :set_newsletter => :environment do  User.all.each do |user|   if user.confirmed?    user.receive_newsletter = true    user.save   end  end endend

任務(wù)會(huì)遍歷所有用戶,想想如果數(shù)據(jù)集很大會(huì)怎樣
通過ActiveRecord更新數(shù)據(jù),會(huì)觸發(fā)模型中的驗(yàn)證和創(chuàng)建回調(diào)方法
通過if條件語(yǔ)句來判斷是否需要更新數(shù)據(jù)
不能直觀的看出這個(gè)任務(wù)是干什么的,沒有一個(gè)desc,所以也無法通過rake -T找到它
Good Rake Task

# lib/tasks/temporary/users.rakenamespace :users do desc "Update confirmed users to receive newsletter" task set_newsletter: :environment do  users = User.confirmed  puts "Going to update #{users.count} users"  ActiveRecord::Base.transaction do   users.each do |user|    user.mark_newsletter_received!    print "."   end  end  puts " All done now!" endend

通過desc我們可以清楚的知道任務(wù)的意圖,并且它也會(huì)顯示在rake -T中
通過scope解決了if語(yǔ)句的問題
引入了計(jì)數(shù)器,以及執(zhí)行狀態(tài)顯示,能讓我們了解到程序運(yùn)行時(shí)的情況
把數(shù)據(jù)的更改放到了事務(wù)中執(zhí)行,可以語(yǔ)法因?yàn)閿?shù)據(jù)異常,奔潰導(dǎo)致的不一致問題
最后要補(bǔ)充說明的一點(diǎn)是,有時(shí)候,可能直接用SQL語(yǔ)句更簡(jiǎn)單有效,特別是在數(shù)據(jù)集比較大的情況下,一條SQL能幫你省去不少無謂的循環(huán)!另外,記得上開發(fā)環(huán)境之前,最好預(yù)先檢測(cè)一下Rake任務(wù)的有效性。

以上就是我們?yōu)楦魑慌笥褌兛偨Y(jié)的淺談Ruby on Rails下的rake與數(shù)據(jù)庫(kù)數(shù)據(jù)遷移的實(shí)例演示,各位朋友們對(duì)于上面的內(nèi)容還算滿意嗎

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 中超| 屏边| 陇川县| 大同县| 中牟县| 河北省| 扎鲁特旗| 北流市| 乌苏市| 东平县| 永定县| 日照市| 吉木乃县| 凤台县| 澳门| 内乡县| 砀山县| 宁陵县| 无锡市| 兴海县| 新巴尔虎右旗| 长岛县| 土默特右旗| 竹溪县| 乐亭县| 枣庄市| 中牟县| 临朐县| 罗源县| 郑州市| 葫芦岛市| 明光市| 长春市| 屏山县| 建昌县| 呼图壁县| 交城县| 华宁县| 丰原市| 航空| 太谷县|