레이크 작업의 소스 파일을 어떻게 찾습니까?
-
06-07-2019 - |
문제
입력하여 가능한 모든 레이크 작업을 볼 수 있다는 것을 알고 있습니다.
rake -T
하지만 작업이 정확히 무엇인지 알아야합니다. 출력에서 실제로 작업이있는 소스 파일을 어떻게 찾을 수 있습니까? 예를 들어, DB의 소스를 찾으려고 노력하고 있습니다 : 스키마 : 덤프 작업입니다.
해결책
다른 사람들의 말에도 불구하고, 당신 ~할 수 있다 프로그래밍 방식으로 레일 애플리케이션에서 레이크 작업의 소스 위치를 가져옵니다. 이렇게하려면 코드 나 콘솔에서 다음과 같은 것을 실행하십시오.
# 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)
이 작업에 대해 실행되는 모든 코드의 소스 위치를 반환합니다. 당신은 또한 사용할 수 있습니다 #prerequisites
대신에 #source_location
전제 조건 작업 이름 (예 : '환경'등) 목록을 얻으려면.
다음을 사용하여로드 된 모든 작업을 나열 할 수도 있습니다.
Rake.application.tasks
업데이트: 아래에서 Magne의 좋은 답변을 참조하십시오. 버전의 경우 레이크> = 0.9.0 당신이 사용할 수있는 rake -W
레이크 작업의 소스 위치를 보여줍니다.
다른 팁
나는 이것이 오래된 질문이지만 어쨌든 :
rake -W
이것은 레이크 0.9.0에 도입되었습니다.
http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html
작업이 정의되는 위치를 보여주기위한 –where (-w) 플래그 지원.
불행히도 이것을 할 프로그래밍 방식의 방법은 없습니다. 레이크 작업은 레일 자체, LIB/작업 또는 작업 디렉토리가있는 플러그인에서로드 할 수 있습니다.
이것은 레일 자체 내에서 아닌 대부분의 모든 것을 사용해야합니다.
find . -name "*.rake" | xargs grep "whatever"
에 관해서 db:schema:dump
, 여기 소스는 다음과 같습니다.
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/Tasks/Database의 242 행에서 찾을 수 있습니다. Rails 2.2.2 gem의 레이크. 다른 버전의 레일이 있다면 검색하기 만하면namespace :schema
".
당신은 아마도 실제로 원천을 원할 것입니다 ActiveRecord::SchemaDumper
, 그러나 나는 그것이 어디에 있는지 알아내는 데 어려움이 없어야한다고 생각합니다. :-)
레일의 대부분의 갈퀴 작업의 경우 레일 보석 디렉토리, LIB/작업으로 살펴보십시오.
앱 디렉토리 구조로 Rails를 공급 한 경우 공급 업체/레일/레일/LIB/작업을 대신 확인하십시오.
어느 쪽이든, db : schema : dump는 데이터베이스에 있습니다.