2009-05-06 3 views
37

난 당신이 레이크 작업의 소스 파일을 찾으려면 어떻게합니까?

rake -T 

을 입력하여 가능한 모든 레이크 작업을 볼 수있어하지만 정확하게 작업이 무엇을 알 필요가있다. 결과물에서 실제로 작업이있는 소스 파일을 어떻게 찾을 수 있습니까? 예를 들어, db : schema : dump 태스크의 소스를 찾으려고합니다.

답변

36

다른 사람들이 말한 내용에도 불구하고 레일즈 애플리케이션에서 레이크 작업의 소스 위치를 프로그래밍 방식으로 얻을 수 있습니다. 이렇게하려면, 그냥 코드에서 또는 콘솔에서 다음과 같은 것을 실행

# load all the tasks associated with the rails app 
Rails.application.load_tasks 

# get the source locations of actions called by a task 
task_name = 'db:schema:load' # fully scoped task name 
Rake.application[task_name].actions.map(&:source_location) 

이이 작업에 대해 실행됩니다 코드의 소스 위치를 반환합니다. #source_location 대신 #prerequisites을 사용하여 필수 작업 이름 (예 : '환경'등)의 목록을 얻을 수도 있습니다.

또한 사용하여로드 된 모든 작업을 나열 할 수 있습니다

Rake.application.tasks 

UPDATE : 아래 참조 마그네의 좋은 답변을. 의 경우 레이크> = 0.9.0rake -W을 사용하여 레이크 작업의 소스 위치를 표시 할 수 있습니다.

+0

꽤 멋진 찾으십시오. – Tilendor

+1

참고로 :이 방법을 사용하기 전에 레이크가로드되었는지 확인해야합니다. 그렇지 않은 경우 단순히 "요구 '레이크 (rake)'를 수행하십시오. –

+0

많은 의무, 친절 선생님! – mrstif

0

레일스의 대부분의 레이크 작업에 대해서는 레일스 젬 디렉토리의 lib/tasks를보십시오.

당신이 다음 공급 업체/레일/railties/lib 디렉토리/작업 대신

어느 쪽이든을 보면 앱 디렉토리 구조로 레일을 vendored 한 경우, DB : 스키마 덤프 databases.rake입니다.

+0

그러나 프로그래밍 방식으로이를 수행 할 수 있습니까? 나는 파일 검색에서 찾기를 끝내었다. – Tilendor

6

불행히도이를 수행 할 프로그래밍 방식은 없습니다. 레이크 작업은 레일 자체, lib/tasks 또는 작업 디렉토리가있는 모든 플러그인에서로드 할 수 있습니다.

하지 레일 자체 내에서 대부분의 모든 것을 잡을해야합니다

desc "Create a db/schema.rb file that can be portably used against any DB supported by AR" 
task :dump => :environment do 
    require 'active_record/schema_dumper' 
    File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file| 
    ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file) 
    end 
end 

그것은 lib 디렉토리/작업 /베이스 라인 (242)에서 찾을 수 있습니다 : db:schema:dump에 관해서는

find . -name "*.rake" | xargs grep "whatever" 

를 여기 소스입니다. 레일 2.2.2 보석에 갈퀴. 다른 버전의 Rails가 있다면 "namespace :schema"으로 검색하십시오.

아마도 실제로는 ActiveRecord::SchemaDumper의 출처를 원하지만 실제로 문제가없는 것으로 생각합니다. :-)

71

나는이 오래된 질문이지만, 어떤 경우에 알고

rake -W 

이는 레이크 0.9.0에서 소개되었습니다.

http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html 작업이 정의 된 위치를 표시에 대한 어디 (-W) 플래그

지원.

+0

업데이트 해 주셔서 감사합니다. 항상 최신 답변을 제공해드립니다. –

+0

고맙습니다. 단! :) – flagman

+0

이것은 허용 된 대답이어야합니다! –

관련 문제