about 3 years ago

本章的作業目標:

  • rake 的概念解說
  • 撰寫 seed.rb 檔
  • 撰寫 rake dev:build => 自動化執行清空+重跑 migration +種子載入資料

rake 的概念解說

rake 直譯上來說就是 Ruby Make ,用 ruby 語言開發的 build tool

也可以說是一套 task 管理工具,幫助我們自動化執行所需要的指令

rake -T
會列出所有目前能執行的 rake 指令 (包含 install gem 以後建置在內的)

像我們之前常用的
rake db:migrate
就是執行 資料庫異動設定 的 task


撰寫 seed.rb 檔

我們在開發專案的時候,常會需要弄些假資料來填充版面
或是說當資料庫炸掉的時候,會很想一股腦把 資料庫整個 reset 掉
並希望 reset 完還能把一些資料放進去,像是 user, groups, posts,不用一個個手動輸入

我們來做一個 seed 檔,需求:

  1. 建立一個 user 帳號 => example@gmail.com , 密碼 12345678
  2. 並用此帳號建立 20 個 groups
  3. 每個 group 各有 30 個 posts
打開 db/seeds.rb
db/seeds.rb
-(空的)
+puts "Hello World!"

rake db:seed
執行 db:seed

db/seeds.rb
puts "Hello World!"

+create_account = User.create([email: 'example@gmail.com', password: '12345678', password_confirmation: '12345678', name: '測試用帳號'])

rake db:seed

db/seeds.rb
puts 'Hello World!'
+ puts "這個種子檔會自動建立一個帳號, 並且創建 20 個 groups, 每個 group 各 30 個 posts"

create_account = User.create([email: 'example@gmail.com', password: '12345678', password_confirmation: '12345678', name: '測試用帳號'])

+ create_groups = for i in 1..20 do
+                   Group.create!([title: "Group no.#{i}", description: "這是用種子建立的第 #{i} 個討論版", user_id: "1"])
+                   GroupUser.create(group_id: i, user_id: 1)
+                   for k in 1..30 do
+                     Post.create!([group_id: "#{i}",content: "這是用種子建立的第 #{k} 個留言", user_id: "1"])
+                   end
+                 end


rake db:reset
rake db:reset 是內建的 task ,會執行一整套流程
包含 db:drop( 資料庫移除 ) => db:create( 資料庫建立 )
=> db:schema:load ( 資料庫欄位建立 ) => db:seed ( 執行資料庫種子 )

重新啟動 rails s

用帳號: example@gmail.com 密碼 12345678 登入,並進入隨便一個討論版


撰寫 rake dev:build => 自動化執行清空+重跑 migration +種子載入資料

雖然 db:reset 已經能自動地幫我們把資料庫清空、重建、跑 seed
如果想把整個開發中專案的資料一切歸零,還需要跑 rake log:clearrake tmp:clear
如果懶得一個個打上述指令 + rake db:drop + rake db:create + rake db:migrate + rake db:seed
來把整個專案清空重建並建立 seed 檔
可以寫一個 rake 來自動化執行

在 lib/tasks/ 資料夾建立一個檔案 dev.rake

lib/tasks/dev.rake
namespace :dev do
  desc "Rebuild system"
  task :build => ["tmp:clear", "log:clear", "db:drop", "db:create", "db:migrate"]
  task :rebuild => [ "dev:build", "db:seed" ]
end

這樣只要打

rake dev:build
即可把專案資料一切清空歸零重建

rake dev:rebuild
即可重建完再跑 seed

← [ 2.0 ] 7. Refactor Code 整理你的程式碼 [ 2.0 ] 9. 將寫好的專案部署 ( Deploy ) 到遠端 Server 上 →
 
comments powered by Disqus