Я знаю, что задачи Rake могут быть определены в нескольких местах в камне Ruby:
- внутри Rakefile
- внутри
tasks/*.rake
- внутри
lib/tasks/*.rake
Я читал, что первые два должны использоваться, когда задачи должны выполняться на самом камне. Похоже, что третий вариант должен быть выбран, когда требуемые задачи будут общедоступными.
Есть много обучающих онлайн-демонстраций, демонстрирующих множество методов для загрузки задач Rake из драгоценного камня с использованием Rails, а именно с помощью Rails::RailTie
.
Тем не менее, я хотел бы найти способ использования задач создания драгоценных камней в другом драгоценном камне, не требуя Rails.
Есть ли простое решение? Кто-нибудь будет достаточно любезен, чтобы описать правильный подход, или укажите, какие подходы будут жизнеспособными?
UPDATE
Я попытался создать файл 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