麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

淺談Ruby on Rails下的rake與數據庫數據遷移的實例演示

2020-02-24 15:39:28
字體:
來源:轉載
供稿:網友

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

一般認為db/migrate文件夾里的內容是關于你數據庫Schema的演變過程,每個新的開發或線上環境都要通過這些Migration來構建可用的數據庫。但如果這里裝入了,負責細節的業務代碼,比如一些歷史遺留數據的遷移代碼之類的,當一段時間后,數據庫的結構變化了,但Migration沒有跟著變化,漸漸的曾經的輔助代碼,就成了垃圾代碼,不僅不能幫忙構建環境,還會讓rake db:migrate的執行過程異常中斷,無形中增加了新環境的構建成本。

所以正確的做法應該是,Migration只負責Schema相關的事宜,而不該過問數據的細節,具體的數據細節,全部交由rake任務來做,并且這些rake任務也不是一成不變的,隨著時間的推移它們也會廢棄掉,但因為它們與系統的其它部分不想管,所以直接刪掉即可。不過使用Rake做數據遷移也是有講究的,具體如下:

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

任務會遍歷所有用戶,想想如果數據集很大會怎樣
通過ActiveRecord更新數據,會觸發模型中的驗證和創建回調方法
通過if條件語句來判斷是否需要更新數據
不能直觀的看出這個任務是干什么的,沒有一個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我們可以清楚的知道任務的意圖,并且它也會顯示在rake -T中
通過scope解決了if語句的問題
引入了計數器,以及執行狀態顯示,能讓我們了解到程序運行時的情況
把數據的更改放到了事務中執行,可以語法因為數據異常,奔潰導致的不一致問題
最后要補充說明的一點是,有時候,可能直接用SQL語句更簡單有效,特別是在數據集比較大的情況下,一條SQL能幫你省去不少無謂的循環!另外,記得上開發環境之前,最好預先檢測一下Rake任務的有效性。

以上就是我們為各位朋友們總結的淺談Ruby on Rails下的rake與數據庫數據遷移的實例演示,各位朋友們對于上面的內容還算滿意嗎

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 一级免费看片 | 操你啦免费视频 | www视频免费在线观看 | 国产精品成人一区二区三区电影毛片 | 久久久久中精品中文字幕19 | 亚洲看片网 | 成人免费毛片在线观看 | 日韩欧美激情视频 | 国产精品久久久久久久久久大牛 | 91看片片| 成人在线视频精品 | 国产精品久久久久久久模特 | 成av在线 | 国产一区二区不卡视频 | 久久免费精品视频 | 一级精品 | 日本在线观看一区二区 | www.guochan| 奶子吧naiziba.cc免费午夜片在线观看 | 久久亚洲春色中文字幕久久 | 国产午夜精品一区二区三区嫩草 | 亚洲综人网| 性生活视频软件 | 日本成人一二三区 | 精品在线观看一区 | 久久久成人一区二区免费影院 | 日本不卡一二三区 | 亚洲小视频在线 | 欧美精品成人一区二区三区四区 | 黄色片网站免费观看 | 久久这| 在线观看免费av网 | 黄色特级| 成人福利视频在 | 日本黄色免费片 | 午夜视| 91精品国产日韩91久久久久久360 | 久久久久久久免费看 | 毛片在线视频免费观看 | 国产宾馆3p国语对白 | 成人免费乱码大片a毛片视频网站 |