Rails 레이크 작업 사용자 지정

동기 부여



Rails rake 작업은 개발자 또는 다른 메커니즘(예: rake 작업을 호출하는 배포)에서 사용할 특정 작업을 자동화하는 명령입니다. 많은 작업은 중요한 기능을 제공하기 위해 Rails로 구성되어 제공됩니다. 이 게시물에서는 작업을 재정의하고 단계를 변경하여 자신의 응용 프로그램에 맞게 사용자 지정하는 방법을 설명합니다.

다음은 즉시 사용 가능한 작업의 몇 가지 예입니다.

$ rake -T      # Lists all rake tasks for the application
$ rake         # Default rake task. On a fresh application, does the same as rake test
$ rake test    # Task to run your tests (replaced by "rake spec" if using rspec instead of minitest)
$ rake db:seed # Populates the database using the seeds.rb file


그러나 작업은 다른 작업을 실행하기 위해 매우 쉽게 재정의될 수 있습니다. 이것은 테스트 스위트 실행 이상의 것을 포함할 수 있는 빌드 프로세스의 단계를 정의하거나 단순히 기존 작업의 동작을 변경하는 데 유용합니다.

요구 사항에 맞게 갈퀴 작업을 사용자 지정하면 생산성이 향상되고 프로젝트의 모든 사람이 표준화된 프로세스를 사용하고 있는지(또는 최소한 쉽게 수행할 수 있는 도구가 있음) 보장할 수 있습니다.

그것을 하는 방법?



레이크 작업을 재정의하는 것은 매우 간단합니다. 원래 작업을 지우고 재정의하는 두 가지 작업이 포함됩니다. 모든 코드가 새 정의 안에 들어갈 수 있지만 단순성을 위해 각 단계를 자체 레이크 작업으로 깔끔하게 구성하는 것이 좋습니다.

새 갈퀴 작업을 만드는 방법



사용자 정의 레이크 작업은 lib/tasks 폴더 안에 있습니다. ".rake"로 끝나는 모든 파일은 Rails에 의해 자동으로 선택되고 로드됩니다.

# lib/tasks/my_task.rake

namespace :custom do
  desc "This take does something useful!"

  task :do_it do
    puts "Do something useful!"
  end
end


완료! 이제 아래 명령을 사용하여 새 레이크 작업을 호출할 수 있습니다. 다음 섹션에서는 다른 작업에서 호출하는 방법을 살펴보겠습니다.

$ rake custom:do_it


기존 작업을 재정의하는 방법



작업을 재정의하려면 현재 동작을 지우고 Rakefile에서 재정의하십시오. 아래 예제는 기본 레이크를 재정의하여 사용자 지정 작업을 호출합니다.

# Rakefile
# frozen_string_literal: true

require_relative "config/application"

Rails.application.load_tasks
Rake::Task["default"].clear

task :default do
  Rake::Task["custom:do_it"].invoke
end


그리고 당신은 그것을 가지고 있습니다! 기본 레이크 작업은 애플리케이션이 필요로 하는 모든 작업을 수행하도록 구성할 수 있습니다.

다음 섹션에서는 Rails 애플리케이션에 대한 일반적인 설정을 살펴보겠습니다.

내가 선호하는 구성



내가 사용하고 싶은 구성은 기본 작업과 테스트 레이크 작업을 모두 재정의하여 몇 가지 도구와 통합합니다. 각각에 대한 단계는 아래에 설명되어 있습니다(해당 리포지토리에서 개별 도구 설정 및 구성 확인).

이러한 단계 중 하나라도 중단되면 빌드 프로세스가 중지되고 실패합니다.

기본

단계는 다음 순서로 실행됩니다.

  • Brakeman - 보안을 위한 코드 분석

  • Parallel tests - 병렬로 테스트 실행

  • Rubocop - 코드 품질 분석

  • Rails best practices - Rails 분석을 위한 모범 사례

  • Reek - 코드 냄새 분석

  • 테스트

    이것은 단순히 병렬을 사용하도록 실행 중인 테스트를 대체합니다.

  • Parallel tests - 병렬로 테스트 실행

  • 높은 수준의 설명을 살펴보았으므로 이제 비즈니스를 시작하겠습니다. 다음은 재정의된 작업과 개별 작업 정의 자체가 있는 Rakefile입니다.

    # Rakefile
    # frozen_string_literal: true
    
    require_relative "config/application"
    require "rubocop/rake_task"
    
    Rails.application.load_tasks
    Rake::Task["default"].clear
    Rake::Task["test"].clear
    
    task :default do
      Rake::Task["brakeman:check"].invoke
      Rake::Task["parallel:test"].invoke
    
      RuboCop::RakeTask.new(:rubocop)
      Rake::Task["rubocop"].invoke
      Rake::Task["rails_best_practices:run"].invoke
      Rake::Task["reek:run"].invoke
    end
    
    task :test do
      Rake::Task["parallel:test"].invoke
    end
    


    브레이크맨 레이크 작업

    # lib/tasks/brakeman.rake
    # frozen_string_literal: true
    
    namespace :brakeman do
      desc "Check your code with Brakeman"
    
      task :check do
        require "brakeman"
        result = Brakeman.run app_path: ".", print_report: true, pager: nil
        exit Brakeman::Warnings_Found_Exit_Code unless result.filtered_warnings.empty?
      end
    end
    


    레일 모범 사례 레이크 작업

    # lib/tasks/rails_best_practices.rake
    # frozen_string_literal: true
    
    namespace :rails_best_practices do
      desc "Run rails best practices"
    
      task :run do
        puts "Running rails best practices!"
        puts `rails_best_practices`
      end
    end
    


    악취가 나는 갈퀴 작업

    # lib/tasks/reek.rake
    # frozen_string_literal: true
    
    namespace :reek do
      desc "Run reek"
    
      task :run do
        puts "Running reek!"
        bundle exec "reek ."
      end
    end
    


    젬파일

    # Gemfile
    group :development, :test do
      gem "brakeman", require: false
      gem "parallel_tests"
      gem "rails_best_practices", require: false
      gem "reek", require: false
      gem "rubocop", require: false
    end
    


    결론



    재정의된 갈퀴 작업은 생산성을 높이고 팀 구성원 간에 모범 사례를 적용하는 데 도움이 될 수 있습니다. 그들을 활용하십시오!

    갈퀴 작업과 통합할 다른 도구는 무엇입니까?

    이 기능은 다른 어떤 용도로 사용할 수 있습니까?

    좋은 웹페이지 즐겨찾기