Rake Ruby
Ruby
106
White

Lê Minh Tuấn viết ngày 23/10/2015

1. What is Rake?

  • Là một công cụ quản lý các task của một project.
  • Có khả năng build các project.
  • Các phần mềm tương tự như Apache Ant, Maven, Make.
  • Được viết bằng Ruby.
  • Rake được mô tả trong Rakefiles (equivalent of Makefiles in Make), Rakefile sử dụng cú pháp của Ruby.
  • Dev định nghĩa các tasks trong file Rakefile;
  • Từ version Ruby 1.9, Rake trở thành một phần trong thư viện chuẩn của Ruby.
  • Rake Format http://ruby-doc.org/core-1.9.3/doc/rake/rakefile_rdoc.html
  • Túm lại Rake giống như thằng Host nhận nhiệm vụ từ Dev và gọi các thằng khác thực hiện nhiệm vụ.

For example:

  • Create a folder.
  • Create Rakefile file in the folder which just be create before.
  • The content of Rakefile is like following codes.
task default: [:test]

task :test do                                                                   
  hello                                                                         
end                                                                             

def hello                                                                       
  p "Hello world!!!"                                                                
end

Let get started!

$ rake
$ Hello world!!!

2. Difference Between Rake and Other Build Tool

  • Có một sự khác biệt nhẹ giữa Rake với các công cụ build app khác, đó là, thay vì phải viết Makefile cho make, build.xml cho ant hay pom.xml cho mvn (Apache Maven) bạn chỉ cần viết code Ruby để định nghĩa các task trong file Rakefile. Có thể hiểu khi viết Rakefile ta sẽ sử dụng cú pháp ruby.

3. Install Rake

gem install rake

$ which rake 
$ /home/leminhtuan/.rvm/gems/ruby-2.1.5/bin/rake

4. Simple Example

Tạo Rakefile

task default: [:test]

task :test do                                                                   
  p "hello world !!!"                                                                         
end 

Run

$ rake
$ hello world !!!

5. Rakefile Format

  • Tasks: (task) là thành phần chính trong rake, định nghĩa một công việc (giống như một method trong code), trong một Rakefile có thể bao gầm nhiều task.
  • File Tasks: (file) là một task dùng để tạo file.
  • Directory Tasks: (directory) đôi khi chúng ta cần taoh một thư mục lúc đó ta sẽ sử dụng directory task. (task "directory" trong rake cũng giống như command "mkdir" của shell unix) vì thế ta có thể định nghĩa ra một task sau đó gọi lệnh "mkdir" hay cũng có thể sử dụng trực tiếp task "directory".


  • Task Arguments: Ta có thể chuyền tham số vào task
task :hello, [:first_name, :last_name] do |t, args|
  puts "First name is #{args.first_name}"
  puts "Last  name is #{args.last_name}"
end
$ rake "hello[Tuấn, Tâm]"
$ First name is Tuấn
$ Last  name is Tâm


  • Namespaces: Khi project ngày càng lớn trong đó có những task có thể trùng tên do tương tự về chức năng vì thế ta phải sử dụng namespace để phân biệt.
namespace "main" do
  task :build do
    # Build the main program
  end
end
namespace "samples" do
  task :build do
    # Build the sample programs
  end
end
task build: %w[main:build samples:build]
  • The Default Task: Khi muốn chạy một task trong Rakefile ta luôn phải chỉ rõ task nào muốn chạy:
#task default: [:test]  
task :test do
  hello                                                                         
end
def hello                                                    
  p "Hello haha"                                                                
end                                                                            
task :name,  [:first_name,  :last_name] do |t,  args|                           
  puts "First name is #{args.first_name}"                                       
  puts "Last  name is #{args.last_name}"                                        
end   

Chạy task co tên là "test" trong Rakefile.

$  rake test

Nếu đã định nghĩa task default: [:name] thì ta chỉ cần chạy rake mà không cần chỉ rõ ra task khi chạy racke.

  • Invoking Tasks: Cũng giống như việc khi ở bên trong Phương thức M1 ta muốn gọi phương thức M2, thì đối với Rake ta có thể gọi một task T2 khi đang ở task T1.
  • Rake::Task["test"].invoke
task default: [:name]                                                                                                                       

task :test do                                                                   
  hello                                                                         
end                                                                             

def hello                                                                       
  p "Hello haha"                                                                
end                                                                             

task :name,  [:first_name,  :last_name] do |t,  args|                           
  Rake::Task["test"].invoke                                                     
  puts "First name is #{args.first_name}"                                       
  puts "Last  name is #{args.last_name}"                                        
end    
$ rake "name[1, 2]"
$ "Hello haha"
$ First name is 1
$ Last  name is 2

6. Rake + Rails

Rails đã định nghĩa ra các task mà bất kì ai đã dùng rails đều đã sử dụng qua:
ví dụ:

  • Task migrate trong namespace db (rake db:migrate)
  • Task seed trong namespace db (rake db:seed)
  • Task routes (rake routes)
  • Task precompile trong name space assets (rake assets:precompile)

Rails tự động load tất cả các file có đuôi .rake trong thư mục lib/tasks và coi chúng là các task của một Rails project (vì thế ta hoàn toàn có thể tạo ra những task của riêng mình).

7. Create a rake task in Rails.

  • rails g task sẽ dùng để tạo ra task trong Rails.
$ rails g task my_namespace my_task1 my_task2
$ create lib/tasks/my_namespace.rake
  • Rails sẽ store các task vừa tạo trong thư mục lib/tasks/. lúc này ta sẽ có một file .rake là lib/tasks/my_namespace.rake
namespace :my_namespace do
  desc "TODO"
    task :my_task1 => :environment do
  end

  desc "TODO"
    task :my_task2 => :environment do
  end
end
  • Và bây giờ ta có thể viết một task bằng việc viết code trong phần do ... end

8. Thank worlds.

Above is a little bit about Rake which i have just been learning. Please give me some feedbacks so that i could better my knowledge.
Give you guys alot thanks from me. (thankyou)

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Lê Minh Tuấn

11 bài viết.
22 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
15 2
1. Maven là gì? 2. Maven hoạt động như nào? 3. Tại Sao cần Maven? 4. Cài đặt Maven 5. Khởi tạo một Project Java bằng Maven 6. Cấu trúc POM.xml...
Lê Minh Tuấn viết hơn 2 năm trước
15 2
White
15 8
(Ảnh) 1. Elasticsearch là gì ??? 2. ElasticSearch dùng cho những ứng dụng nào ??? 3. Vấn đề : Hiện nay tất cả các hệ thống thông tin (hay c...
Lê Minh Tuấn viết hơn 2 năm trước
15 8
White
11 0
(Ảnh) 1. Software design pattern là gì ? 2. Có bắt buộc phải sử dụng design pattern khi lập trình ? 3. Có bao nhiêu design pattern ? 5. Bà...
Lê Minh Tuấn viết hơn 2 năm trước
11 0
Bài viết liên quan
White
8 6
Chưa xem phần 2? Xem (Link) Trong bài viết này tôi giới thiệu cho các bạn về khái niệm function arity, một cách gọi mĩ miều của số lượng argument ...
Lơi Rệ viết hơn 2 năm trước
8 6
White
8 1
Tiếp theo (Link) Mình sẽ hướng dẫn cách test căn bản cho API mình tạo. Thật ra mà nói thì mình phải viết test trước khi làm nhưng mà để tránh việc...
My Mai viết hơn 2 năm trước
8 1
White
4 2
__Chú thích__: Đây là bản dịch tiếng Việt của bài viết gốc của tôi. Nếu bạn muốn xem bản tiếng Anh, xin hãy trỏ tới URL (Link) Lời mở (Link) là ...
Lơi Rệ viết gần 3 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
11 bài viết.
22 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!