복붙노트

[RUBY-ON-RAILS] 레일 '기본 레이크 작업을 재정의

RUBY-ON-RAILS

레일 '기본 레이크 작업을 재정의

나는 레이크 DB의 기능을 무시하고자하는 레일 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 및 레이크 DB를 수행 시험 : prepare2는, 그것은 잘 작동합니다. 작업을 준비 :이에서 그리는 자연 결론은 광산이 표준에 의해 무시되도록 내 레이크 작업, 내장 레일 것들 전에 정의되고 있다는 점이다.

사람이 어떻게이 문제를 해결할 수있는 방법을 볼 수 있습니까? 새 작업을 사용하는 것보다 차라리 그것을 무시할 것입니다. 감사합니다, 최대

해결법

  1. ==============================

    1.이미 존재하는 레이크 작업을 정의하면, 그 실행은 원래 작업의 실행에 추가됩니다; 두 작업이 실행됩니다.

    이미 존재하는 레이크 작업을 정의하면, 그 실행은 원래 작업의 실행에 추가됩니다; 두 작업이 실행됩니다.

    당신이 작업을 다시 정의하려면 먼저 원래 작업을 취소해야합니다

    Rake::Task["db:test:prepare"].clear
    

    이 작업은 레이크에서 실행 된 후, 다시 다시 호출해도 실행되지 않습니다하는 것이 유용합니다. 이것은 의도적으로 설계된 동작입니다하지만 당신은 다시 실행할 수 있도록 작업에 .reset 호출 할 수 있습니다.

  2. ==============================

    2.당신은 당신의 자신을 추가하기 전에 기본 작업을 제거해야합니다 :

    당신은 당신의 자신을 추가하기 전에 기본 작업을 제거해야합니다 :

    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)

  3. ==============================

    3.그것에 코드 아래에 lib 디렉토리 / 작업 / 및 paster에 새로운 project.rake 파일을 만듭니다.

    그것에 코드 아래에 lib 디렉토리 / 작업 / 및 paster에 새로운 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 Angelovas 블로그

  4. from https://stackoverflow.com/questions/8112074/overriding-rails-default-rake-tasks by cc-by-sa and MIT license