Rake 是 Ruby 領域的 Make,是個獨立的 Ruby 工具,目的是代替 Unix 中的 make。Rake 根據 Rakefile 和 .rake 文件構建任務。Rails 使用 Rake 實現常見的管理任務,尤其是較爲複雜的任務。
rake about # List versions of all Rai...
rake assets:clean[keep] # Remove old compiled assets
rake assets:clobber # Remove compiled assets
rake assets:environment # Load asset compile envir...
rake assets:precompile # Compile all the assets n...
rake churn # Report the current churn...
rake clean # Remove any temporary pro...
rake clobber # Remove any generated file
rake code_metrics:line_statistics[file_pattern] # Report LOC for each file...
rake code_metrics:stats # Report code statistics (...
rake customer_management:install:migrations # Copy migrations ...
rake customer_service:install:migrations # Copy migrations from cus...
rake db:create # Create the database from...
rake db:drop # Drops the database using...
rake db:fixtures:load # Load fixtures into the c...
rake db:migrate # Migrate the database (op...
rake db:migrate:status # Display status of migrat...
rake about
rake about 任務輸出以下信息:Ruby、RubyGems、Rails 的版本號,Rails 使用的組件,程序所在的文件夾,Rails 當前所處的環境名,程序使用的數據庫適配器,數據庫模式版本號。如果想向他人需求幫助,檢查安全補丁是否影響程序,或者需要查看現有 Rails 程序的信息,可以使用這個任務。
rake assets:precompile 任務會預編譯 app/assets 文件夾中的靜態資源文件。rake assets:clean 任務會把編譯好的靜態資源文件刪除。
Rake 命名空間 db: 中最常用的任務是 migrate 和 create,這兩個任務會嘗試運行所有遷移相關的 Rake 任務(up,down,redo,reset)。rake db:version 在排查問題時很有用,會輸出數據庫的當前版本。
Current version: 20140820034433
db:charset 檢索當前環境下數據庫的字符設置
db:collation 檢索當前環境下數據庫的校對
db:create 用config\database.yml中的定義創建當前 RAILS_ENV 項目環境下的數據庫
db:create:all 用config\database.yml中的定義創建所有數據庫
db:drop 刪除當前 RAILS_ENV項目環境中的數據庫
db:drop:all 刪除所有在 config\database.yml中定義的數據庫
db:reset 從db\schema.rb中爲當前環境重建數據庫(先刪後建).
db:rollback 回滾(清華出版社一本SQLSERVER書的名詞[很奇怪爲什麼不直接用滾回])數據庫到前一個版本. 指定回滾到哪一步要用 STEP=n 參數
db:version 檢索當前模式下的版本
備份數據庫
rake db:backup:create 根據database.yml的信息備份數據庫
rake db:backup:destroy 默認刪除一天前的備份數據
rake db:backup:rebuild 默認恢復最新的備份數據
doc: 命名空間中的任務可以生成程序的文檔,Rails API 文檔和 Rails 指南。生成的文檔可以隨意分割,減少程序的大小,適合在嵌入式平臺使用。
rake doc:app 在 doc/app 文件夾中生成程序的文檔;
rake doc:guides 在 doc/guides 文件夾中生成 Rails 指南;
rake doc:rails 在 doc/api 文件夾中生成 Rails API 文檔;
rake routes 會列出程序中定義的所有路由,可爲解決路由問題提供幫助,還可以讓你對程序中的所有 URL 有個整體瞭解。
rake time:zones:all 列出 Rails 能理解的所有時區
rake stats輸出你應用程序的有用統計,顯示千行代碼數和測試比例等
以坐火車爲例:
分:1.買票2.進站3.乘車
在rakefile文件中寫這麼一個task
task :action1 do
puts "買票"
end
task :action2 do
puts "進站"
end
task :action3 do
puts "乘車"
end
rake action1
買票
rake action2
進站
rake action3
乘車
自己編寫的rake任務保存在rails root/lib/tasks中,擴展名:.rake
如果在任務中要和程序的模型交互,例如查詢數據庫等,可用environment任務,加載程序代碼。
multitask: copy_files => [copy_src, :copy_doc, :copy_bin] do
puts "..............."
end
copy_files是一個普通那個任務,它的動作在所有依賴任務完成後纔會執行,但copy_src, copy_doc, copy_bin這三個任務會並行執行,他們之間並無影響,如果這三個任務還依賴於其他共同的任務copy_all,則當copy_all執行完後才執行這三個任務
如果有release任務需要版本號作參數:rake release[0.8.2]
這樣參數release就會傳遞給release任務,多個參數可以以逗號隔開,列表形式傳遞給任務:rake name[jon,doe]
rake任務及其參數是以單個命令行參數傳遞給rake的,即中間不允許有空格。如果任務名和參數名包含空格則需使用引號:
rake ''name [billy bob,jon]"
rake release[0.8.2]可以寫成rake release RELEASE_VERSION = 0.8.2
必須聲明接收參數的任務才能接收參數
task:name,[:first_name,:last_name]
[:first_name,:last_name]爲name任務需要接收的參數
利用task塊的第二個參數可以在動作中訪問傳遞過來的參數
task:name,[:first_name, :last_name] do |t,args|
puts "first name is #{args.first_name}"
end
塊中的t總是綁定爲當前任務對象,第二個參數args就是傳遞過來的參數對象
爲參數指定默認值
task :name,[:first_name, :last_name] do |t,args|
args.with_defaults(:first_name => ''jon", :last_name => "jan"
end
命名空間
當rake文件很多時,當你有很多任務的時候,你需要關注它們的命名衝突問題,命名空間(namespace)就是一個自然的解決方案。你可以爲上面的三個任務定義一個叫做home的命名空間。
namespace :home do
task :action1 do rake home:action1
puts "買票"
end rake home:action2
task :action2 => :action1 do
puts "進站" rake home:action3
end
task :action3 => :action3 do
puts "乘車"
end
end
desc 可以使用ruby標準註釋#,但如果希使用rake - T來顯示任務的描述,就需要使用desc命令描述任務