婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺談Ruby on Rails下的rake與數(shù)據(jù)庫數(shù)據(jù)遷移操作

淺談Ruby on Rails下的rake與數(shù)據(jù)庫數(shù)據(jù)遷移操作

熱門標簽:地圖標注賺錢項目注冊 白銀外呼paas系統(tǒng) 百度地圖標注自定義圖片 徐州網(wǎng)絡外呼系統(tǒng)哪個好 高德地圖標注客服 湖州u友防封電銷卡 滴滴外呼系統(tǒng) 常德電銷平臺外呼系統(tǒng)軟件價格 電銷機器人廠商代理

不知道你有沒有把數(shù)據(jù)遷移寫入Migration文件的經(jīng)歷,相信無論是老鳥還是新手都這樣干過吧。事實上,這樣做并不是行不通,只不過這樣的實踐慢慢會給你引入一些不必要的麻煩。

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

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

Bad Rake Task

# lib/tasks/temporary/users.rake
namespace :users do
 task :set_newsletter => :environment do
  User.all.each do |user|
   if user.confirmed?
    user.receive_newsletter = true
    user.save
   end
  end
 end
end

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

# lib/tasks/temporary/users.rake
namespace :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!"
 end
end

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

您可能感興趣的文章:
  • Ruby連接使用windows下sql server數(shù)據(jù)庫代碼實例
  • 在Ruby程序中連接數(shù)據(jù)庫的詳細教程
  • Ruby中訪問SQL Server數(shù)據(jù)庫的配置實例
  • ruby+nokogori抓取糗事百科前10頁并存儲進數(shù)據(jù)庫示例
  • Ruby on Rails框架程序連接MongoDB的教程

標簽:三沙 荊門 普洱 張家界 遼寧 梧州 公主嶺 永州

巨人網(wǎng)絡通訊聲明:本文標題《淺談Ruby on Rails下的rake與數(shù)據(jù)庫數(shù)據(jù)遷移操作》,本文關鍵詞  淺談,Ruby,Rails,下的,rake,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談Ruby on Rails下的rake與數(shù)據(jù)庫數(shù)據(jù)遷移操作》相關的同類信息!
  • 本頁收集關于淺談Ruby on Rails下的rake與數(shù)據(jù)庫數(shù)據(jù)遷移操作的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 京山县| 巍山| 扶余县| 理塘县| 普兰县| 射洪县| 南平市| 正宁县| 修水县| 西贡区| 苏尼特右旗| 兴和县| 开封县| 辉县市| 朝阳市| 宜州市| 土默特右旗| 延长县| 虹口区| 兴安盟| 沾化县| 钟山县| 晋中市| 都昌县| 温州市| 万山特区| 乌兰察布市| 清远市| 丹东市| 潜山县| 双流县| 都匀市| 钟山县| 方城县| 武宣县| 秦安县| 上思县| 永丰县| 沾益县| 大田县| 苗栗市|