33

だから私は小さな宝石を書いていて、その中にいくつかの特定のレーキタスクを含む '/tasks' ディレクトリがあります。gem が必要な場所で、これらのタスクをどこでも自動的に利用できるようにするにはどうすればよいですか? たとえば、gem をインストールした後、Rails ルート ディレクトリ内で「rake mygemrake:task」を実行できればと思います。

4

5 に答える 5

23

Rails3 アプリケーションの場合、gem 用の Railtie の作成を検討することをお勧めします。

あなたはそうすることができます:

lib/your_gem/railtie.rb

require 'your_gem'
require 'rails'
module YourGem
  class Railtie < Rails::Railtie
    rake_tasks do
      require 'path/to/rake.task'
    end
  end
end

lib/your_gem.rb

module YourGem
  require "lib/your_gem/railtie" if defined?(Rails)
end

とはいえ、私はrake.task自分のrailtie.rb. rake_tasksブロック内で 1 つまたは 2 つのタスクを定義するだけにしました。

于 2010-11-08T09:48:43.060 に答える
2

gem によって提供されるタスクを定義する方法の例については、rakeのrdoctaskを確認してください。タスクは rake ビルド言語ではなく ruby​​ で定義されており、次のように要求できます。

require 'rake'             # the gem
require 'rake/rdoctask'    # the task
于 2009-04-13T13:59:22.303 に答える
0

これらのタスクをアプリケーションの Rakefile にインポートする必要があります。これは私のものです (私は bundler08 を使用して gem を管理しています):

%w(gem1 gem2 gem3).each do |g|
  Dir[File.dirname(__FILE__) + "/vendor/bundler_gems/**/#{g}*/tasks/*.rake"].each do |f|
    import f
  end
end
于 2010-07-28T16:34:09.877 に答える
0

gem の通常の rake タスクを記述し、次のようにロードできます。

require 'rake'
load 'path/to/your/tasks.rake'

また、thor vs. rakeも見てください。

于 2011-01-30T22:13:15.730 に答える
0

それが日本酒です。Datamapper と Merb は Sake を使用して成功を収めています。

于 2009-04-15T13:43:56.707 に答える