젬에 레이크 작업 포함
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'
의 /lib
dir 이로드 경로에 있기 때문에 그냥 말할 수 있습니다 .
어느 /tasks
와 lib/tasks
좋은 장소입니다. 내가 사용 /tasks
하는 작업은 보석 자체가, 내가 사용하는 작업이나 관리에 사용되는 의미 할 때 lib/tasks
작업이 보석 사용자가로드 할 의미 때를.
이는 사용자가 lib
Gem이 필요할 때로드 경로에 자동으로 추가되는 폴더 외부의 루비 파일을로드하는 데 문제가있을 수 있기 때문 입니다.
또한 * .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
'IT Share you' 카테고리의 다른 글
Subversion 잠금 오류를 수정하는 방법 (0) | 2020.12.09 |
---|---|
XML 스타일을 사용하여 Android에서 사용자 지정 단추를 만드는 방법 (0) | 2020.12.09 |
여기에서는 상대 가상 경로 ''이 (가) 허용되지 않습니다. (0) | 2020.12.08 |
자바 스크립트에서 unshift () 대 push ()의 시간 복잡성 (0) | 2020.12.08 |
Cygwin ls 명령을 찾을 수 없습니다. (0) | 2020.12.08 |