Rails의 기본 레이크 작업 재정의
rake db:test:prepare
작업 의 기능을 재정의하려는 Rails 2.2 프로젝트가 있습니다 . 나는 이것이 효과가 있다고 생각했지만 그렇지 않습니다.
#lib/tasks/db.rake
namespace :db do
namespace :test do
desc "Overridden version of rails' standard db:test:prepare task since the schema dump used in that can't handle DB enums"
task :prepare => [:environment] do
puts "doing db:structure:dump"
Rake::Task['db:structure:dump'].invoke
puts "doing db:test:clone_structure"
Rake::Task['db:test:clone_structure'].invoke
end
end
end
나는 표준 작업의 행동을 얻습니다. 작업 이름을로 변경 :prepare2
한 다음을 수행 rake db:test:prepare2
하면 제대로 작동합니다. 여기에서 내린 자연스러운 결론은 내 레이크 작업이 내장 된 Rails 작업 보다 먼저 정의되고 있으므로 내 레이크 작업이 표준 :prepare
작업으로 재정의된다는 것입니다.
누구든지 내가 이것을 고칠 수있는 방법을 볼 수 있습니까? 새 작업을 사용하는 것보다 차라리 재정의하고 싶습니다. 감사합니다, 최대
이미 존재하는 레이크 작업을 정의하면 해당 실행이 원래 작업의 실행에 추가됩니다. 두 작업이 모두 실행됩니다.
작업을 재정의하려면 먼저 원래 작업을 지워야합니다.
Rake::Task["db:test:prepare"].clear
rake에서 작업이 실행되면 다시 호출하더라도 다시 실행되지 않는다는 점에 유의하는 것도 유용합니다. 이것은 의도적으로 설계된 것이지만 .reset
작업을 다시 실행하도록 요청할 수 있습니다 .
자신의 작업을 추가하기 전에 기본 작업을 제거해야합니다.
Rake.application.instance_variable_get('@tasks').delete('db:test:prepare')
namespace 'db' do
namespace 'test' do
task 'prepare' do
# ...
end
end
end
상당히 인기있는 관용구 라고하는 편리한 메소드 만드는 것입니다 remove_task
과 같이를 :
Rake::TaskManager.class_eval do
def remove_task(task_name)
@tasks.delete(task_name.to_s)
end
end
def remove_task(task_name)
Rake.application.remove_task(task_name)
end
( 출처 :drnic/newgem
)
lib / tasks /에 새 project.rake 파일을 만들고 코드 아래에 붙여 넣습니다.
namespace :mv do
desc "Display hint and info for your rails 4 project"
task info: :environment do
puts 'Run rake test to test'
end
end
task(:default).clear.enhance ['mv:info']
Krasimir Angelov의 블로그에서 영감을 얻었습니다.
참고 URL : https://stackoverflow.com/questions/8112074/overriding-rails-default-rake-tasks
'code' 카테고리의 다른 글
ITextSharp 기존 PDF에 텍스트 삽입 (0) | 2020.11.01 |
---|---|
Javascript / DOM : DOM 개체의 모든 이벤트를 제거하는 방법은 무엇입니까? (0) | 2020.11.01 |
Android에서 뷰 페이저 스 와이프를 비활성화하거나 활성화하는 방법 (0) | 2020.11.01 |
Webpack의 로더 순서는 무엇입니까? (0) | 2020.11.01 |
버퍼링 된 IO와 버퍼링되지 않은 IO (0) | 2020.11.01 |