天天看點

ruby ,rake個人筆記

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指令描述任務