Rake笔记

Posted on March 30, 2014
  • 非rails项目执行rake,需要用名为Rakefile的文件来承载rake 任务

术语

  • task rakefile的基本单元,包含name,actions,prerequisite,

  • action task里的代码块, 最佳实践:task代码块用do end而不是{},因为优先级关系

  • execute 代码块(actions)是被execute,总是会被执行

  • invoke Prerequisites 是被invoke的,会先检查有没有调用过,如果调用过了就不会再被调用

Note

  • 不加任务名,直接调用rake 将调用rake default

  • 有Prerequisites的task:task name: [:prereq1, :prereq2] 单个prerequisite可以不加array

    Prerequisites 会按照顺序调用

  • 一个task的定义可以分开为多个

  • File Tasks: TODO

  • Directory Tasks: TODO

  • 并行先决:multitask name: %w[p1 p2 p3] {...} p1 p2 p3 会在各自的线程里并行执行,代码块还是会在他们之后执行

    如果并行先决里有任何普通串行先决,所有并行先决将等待串行先决结束,然后再并行

  • 参数传递

    • 定义形参 task :name, [:args1_name, :args2_name] do |t, args|

    • 传递 rake name[john,doe]

      task name和参数列表必须是同一个shell参数,所有如果参数中有空格的话: rake "name[billy bob, smith]" (mac 测试即使没有空格也必须带上引号)

    • 获取 代码块的参数列表中|t, args| args用于获得参数以及设置默认参数, 如args.args1_name

    • 在代码块中设置默认值args.with_defaults(:first_name => "John", :last_name => "Dough") 没有设置默认值的默认值是nil

    • args.extras 获取额外参数列表(数组)

    • args.to_s获取所哟参数列表(命名参数和额外参数)

  • 注释:在task前使用desc, 生成的描述将在rake -T 中可见

  • rake -P 查看rake, 连同先决

  • namespace: 使用namespace定义命名空间,支持嵌套的命名空间


参考资料