Rake タスクは、Ruby gem 内のさまざまな場所で定義できることを認識しています。
- Rakefile 内
- 中身
tasks/*.rake
- 中身
lib/tasks/*.rake
gem 自体でタスクを実行する場合は、最初の 2 つを使用する必要があることを読みました。タスクを公開したい場合は、3 番目のオプションを選択する必要があるようです。
Rails を使用して gem から Rake タスクをロードするさまざまな方法、つまりRails::RailTie
.
ただし、Rails を必要とせずに別の gem 内で依存性 gem のタスクを使用する方法を見つけたいと思います。
これに対する簡単な解決策はありますか?誰かが適切なアプローチを説明したり、実行可能なアプローチを概説したりするのに十分親切でしょうか?
アップデート
bin/my-gem
から Rake タスクを実行するためにシステムで使用できるようにするファイルを作成しようとしましたmy-gem
。以下を内部に入れました。
#!/usr/bin/env ruby
require 'rubygems'
require 'rake'
task=ARGV[0]
spec = Gem::Specification.find_by_name('dsi_core')
Dir["#{spec.gem_dir}/lib/tasks/*.rake"].each {|file| puts file and Rake::load_rakefile(file)}
Rake::Task.clear # Avoid tasks being loaded several times in dev mode
Rake::Task[task].reenable # Support re-execution of a task.
Rake::Task[task].invoke
一部のコンテンツは、この SO 投稿に基づいています。
悲しいことに、gem をインストールして定義済みで実行my-gem mytask
すると、次のように出力されるため、何か間違ったことをしています。mytask
lib/test.rake
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task_manager.rb:49:in `[]': Don't know how to build task 'mytest' (RuntimeError)
from /var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:298:in `[]'
from /var/lib/gems/1.8/gems/my_gem-0.0.1/bin/my_gem:8
from /usr/local/bin/my_gem:19:in `load'
from /usr/local/bin/my_gem:19