문제

입력하여 가능한 모든 레이크 작업을 볼 수 있다는 것을 알고 있습니다.

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는 데이터베이스에 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top