# Rake怎麼用 在安裝ruby時就會一併送給我們的工具程式,自動化建構軟體。 我們建立一個資料夾來處理吧 在vscode裡終端機對的目錄下處理 ``` $rake -> 跳出找不到rakefile ``` 沒關係我們就來新增他要的rakefile 用vscode在該資料夾下新增rakefile 我們就可以在rakefile裏面定義我們想要的任務想要做的工作 假設我們要寄送email 在撰寫定義時 起手式會用到的 :::info task(工作;任務) :任務名稱 do ... end ::: 舉個例子:做一個寄送信件的任務 ```ruby= task :sendmail do puts "sending email..." end # 改寫一下增加效果 sleep 2 睡兩秒 讓他演個戲 ruby= task :sendmail do puts "sending email..." sleep 2 puts "done!" end ``` 定義好了我們就在終端機執行看看 ```$rake sendmail```  完成第一個任務啦~ 為了更完善,我們可以給任務下描述```desc "內容 "``` 透過```$rake -T``` or ```rake --task```可以讓大家了解,這裡有哪些任務跟任務簡述 ```ruby= desc "postman" ->此為描述 task :sendmail do puts "sending email..." sleep 2 puts "done!" end ``` ``` $rake -T 有下描述的任務有哪些(目前在這裡有哪些指令哪些任務) ->rake sendmail # postman 我有一個寄信任務 #描述為郵差先生 ``` 看起來rake很成功,如果我們只執行rake會怎樣呢? ``` $rake ```  啊!好像不能,來看看訊息提示了些什麼? 原來```$rake```是會去**抓預設的rake**但我們尚未設定~ ```ruby= desc "postman" task :sendmail do puts "sending email..." sleep 2 puts "done!" end task :default => :sendmail ``` 我們就在最後一行加上預設指向任務,接下來執行rake不加任何參數時,就會執行我的預設  ### 相依性 任務有相依性Hmmm 用任務A => 指向任務B 語意上比較像是「你要A的話,要先過B這關,才可以!」 舉個例子:下面我寫吃飯跟健康,吃飯前先過洗手這關(健康啊) ```ruby= task :eat => :health do puts "yummy" end task :health do puts "wash your hands! " sleep 2 end ``` 當我執行```$rake eat``` 先洗手才吃飯  **在rails內建有個做好的預設task** ```=> :environment```在把整個rails環境載入進來, 包含model、controller...全都載進來 ### 指令通用 我們在具現化用到的指令```$rails db:migrate``` 其實也是rake指令唷 在rails 5之後怕記不住 一下rake 一下rails 就把rake指令,挪一份給rails ``` $rake -T $rake --task $rails -T $rails --task $rake db:migrate ->$rails db:migrate ``` 所以說效果是一樣的:) 若要 ```$rake migrate``` ```ruby= task :migrate do puts "migration!" end ``` 但我們的db:跑去哪 這時候我們可以用namespace包一層一層,他是可以包很多層的 ```ruby= namespace :db do task :migrate do puts "migration!" end end ``` 撰寫位置可參考,整包檔案的**Rakefile有說明檔**   :::info 新增撰寫處為:資料夾lib->task ->檔名.rake :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up