IT Share you

젬에 레이크 작업 포함

shareyou 2020. 12. 8. 20:27
반응형

젬에 레이크 작업 포함


1) 보석 내부에 레이크 작업을위한 '최적'장소가 있습니까? 나는 그들을 본 적이 /tasks, /lib/tasks그리고 나는 그들로 작성 본 적이 *.rb*.rake-하지 않도록 '올바른'인 (있는 경우)

2) gem이 환경에 구성되면 어떻게 앱에서 사용할 수 있습니까?


Rails 3에서는 Railties를 통해이 작업을 수행합니다. 방금 만든 gem에 대한 코드는 다음과 같습니다.

class BackupTask < Rails::Railtie
  rake_tasks do
    Dir[File.join(File.dirname(__FILE__),'tasks/*.rake')].each { |f| load f }
  end
end

따라서 기본적으로에서 상속하는 클래스를 Rails::Railtie만든 다음 해당 클래스 내에 rake_tasks관련 파일을로드 하는 블록이 있습니다. .rake확장 을 사용하려면 require 대신로드해야합니다 .

전체 경로를 지정해야한다는 것을 알았습니다 Dir(따라서 File.join체조). 파일을 명시 적으로 나열하고 싶다면 내 gem load 'tasks/foo.rake'/libdir 이로드 경로에 있기 때문에 그냥 말할 수 있습니다 .


어느 /taskslib/tasks좋은 장소입니다. 내가 사용 /tasks하는 작업은 보석 자체가, 내가 사용하는 작업이나 관리에 사용되는 의미 할 때 lib/tasks작업이 보석 사용자가로드 할 의미 때를.

이는 사용자가 libGem이 필요할 때로드 경로에 자동으로 추가되는 폴더 외부의 루비 파일을로드하는 데 문제가있을 수 있기 때문 입니다.

또한 * .rake 확장자를 사용하는 것이 좋습니다. 오늘날 거의 모든 IDE는 .rake확장을 ruby ​​파일에 연결하고 대부분의 고급 IDE는 콘텐츠를 레이크 스크립트로 구문 분석 할 수도 있습니다. .rake이 파일 안에있는 내용의 즉각적인 개요를 제공 할 수 있기 때문에 확장명이 너무 개발자를위한 더 나은 선택입니다.

두 번째 질문에 대해서는 플러그인이 Gem으로 패키징 될 때 Rails가 레이크 작업을로드하도록 할 수있는 방법이 없습니다. 애플리케이션에 rake 파일을 포함하거나 (다른 rake 파일 또는 기본 Rakefile에) 프로젝트에서 rake 작업을 복제해야합니다.

공급 업체 폴더에 플러그인을 설치하면 *.rake작업과 lib / tasks 디렉토리의 모든 파일이 다음 두 줄에 의해 Rails 범위에 자동으로로드됩니다.

Dir["#{RAILS_ROOT}/vendor/plugins/*/tasks/**/*.rake"].sort.each { |ext| load ext }
Dir["#{RAILS_ROOT}/vendor/plugins/*/lib/tasks/**/*.rake"].sort.each { |ext| load ext }

Rails 3 지원의 경우 lib / .rb 파일의 맨 위 줄은 다음과 같습니다.

Dir["tasks/**/*.rake"].each { |ext| load ext } if defined?(Rake)

Rails 2 지원을 위해 gem 설치 프로그램은 Rakefile을 편집하고 다음을 추가해야합니다.

Dir["#{Gem.searcher.find('<gemname>').full_gem_path}/lib/tasks/**/*.rake"].each { |ext| load ext }

require 문 뒤에.

메모:

  • 실제 보석의 이름으로 바꾸십시오.
  • 이것은 모든 Rails에 보이는 레이크 작업이 lib / tasks /에 있다고 가정합니다.

나는 아직 더 쉬운 것을 찾지 못했습니다. 코멘트?

참고 URL : https://stackoverflow.com/questions/1878640/include-rake-tasks-in-gems

반응형