2009-12-07 3 views
1

레일스 플러그인을 생성하는 데 문제가 있습니다. 전화 플러그인을 사용할 수 있습니다. 플러그인은 꽤 많은 레이크 작업이지만 레이크 작업에서 사용하는 라이브러리가 있습니다.레일즈 플러그인에 문제가 필요합니다

문제는 파일을 필요로하는 것입니다.

namespace :mplug do 
    task :create do 
    Mplug::Indexer.new 
    end 
end 

이 상수 Mplug을 인식하지 못합니다 :이 레이크 작업이라고 말할 수 있습니다. 그래서 나는 그것을 요구할 필요가 있다고 생각했다.

require 'mplug' 

namespace :mplug do 
    task :create do 
    Mplug::Indexer.new 
    end 
end 

하지만이 메시지가 표시됩니다.

no such file to load -- mplug 

그래, 좋습니다. 플러그인에 대한 경로를 알려줍니다.

require 'vendor/plugins/mplug/lib/mplug' 

namespace :mplug do 
    task :create do 
    Mplug::Indexer.new 
    end 
end 

이 실제로 작동합니다. 그러나 이것이 나쁜 방법이라고 생각하는 것 외에는 필자는 레일 루트에있는 것처럼 플러그인에서 파일을 요구해야합니다. 예를 들어 :

module Mplug 
end 

require 'mplug/indexer' 

지금이어야한다 : 나는 물론 싶지 않아

module Mplug 
end 

require 'vendor/plugins/mplug/lib/mplug/indexer' 

.

이 문제를 해결할 수있는 깔끔한 방법이 있습니까?

감사합니다.

답변

0

하나의 옵션이 FILE 상수를 사용하고 현재 파일에 상대적인 경로의 나머지 부분을 제공하는 것입니다 :

require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mplug') 

(당신의 레이크 작업 파일은 plugin_root/작업에 있다면 ..)

+0

음 ... 어떻게 다음이 필요 문을/플러그인/mplug/lib 디렉토리/mplug.rb 수? 'vendor/plugins/mplug/lib/mplug/indexer'가 필요합니다. – rejeep

+0

대부분의 플러그인은 Rails가 부팅 될 때 파일을 요구하기 위해 init.rb를 사용합니다. 이 레일스 가이드를 검토해 보시기 바랍니다 : http://guides.rubyonrails.org/plugins.html 레일즈 플러그인 디렉토리, init.rb, 요구 사항 등을 구성하는 모범 사례를 제공합니다. – jkrall

2

이 문제를 해결하는 가장 쉬운 방법은 Rails :: Railtie API를 사용하여 레이크 작업을 등록하는 것입니다. lib/mplug.rb에서 정의하는 Railtie :

다음
module Mplug 
    class Railtie < ::Rails::Railtie 
    rake_tasks do 
     load "mplug/rails.rake" 
    end 
    end 
end 

, lib/mplug/rails.rake에서 :

namespace :mplug do 
    task :create do 
    Mplug::Indexer.new 
    end 
end 

그런 다음, 플러그인은 당신의 Gemfile에 정의되어 있는지 확인하십시오. 플러그인이 vendor/plugins에있는 경우, 귀하의 Gemfile이 줄을 추가 : 당신이 자식의 repo에 플러그인을 누르면

gem "mplug", :path => "vendor/plugins/mplug" 

:git를 사용합니다.

이제 rake mplug:create을 사용할 수 있습니다. 당신이 rake -T에 표시하려는 경우, 당신이 설명을 추가해야합니다 공급 업체에

namespace :mplug do 
    desc "creating an mplug" 
    task :create do 
    Mplug::Indexer.new 
    end 
end 
관련 문제