Is it possible to call a task which is defined in a Rakefile
- not in somefile.rake
- from an other Ruby script?
I was hoping that creating a new Rake::Application
would automatically load the Rakefile
from the same directory, but it seems that this is not the case. Here is what I came up with so far:
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
rake = Rake::Application.new
rake[:hello].invoke
Executing this code results in the following:
/opt/ruby/1.9.2-p180/lib/ruby/1.9.1/rake.rb:1720:in `[]': Don't know how to build task 'hello' (RuntimeError)
from script.rb:7:in `<main>'
pp rake
yields the following:
#<Rake::Application:0x00000101118da0
@default_loader=#<Rake::DefaultLoader:0x00000101118b20>,
@imported=[],
@last_description=nil,
@loaders=
{".rb"=>#<Rake::DefaultLoader:0x00000101118a80>,
".rf"=>#<Rake::DefaultLoader:0x000001011189b8>,
".rake"=>#<Rake::DefaultLoader:0x00000101118800>},
@name="rake",
@original_dir=
"/Users/t6d/Projects/Sandbox/Ruby/rake-from-ruby-script",
@pending_imports=[],
@rakefile=nil,
@rakefiles=["rakefile", "Rakefile", "rakefile.rb", "Rakefile.rb"],
@rules=[],
@scope=[],
@tasks={},
@top_level_tasks=[],
@tty_output=false>
It is somehow irritating that @rakefile
is nil
.
Update May 20th, 4:40pm CET
After reading the rake source code for a little while, I figured out that you need to call Rake::Application#init in order to initialize your newly created rake application:
rake = Rake::Application.new
rake.init
rake.load_rakefile
However, I still cannot invoke any tasks defined in my Rakefile:
rake.top_level_tasks # => ["default"]
I'd gladly appreciate any help on that matter.
Go to Websites & Domains and click Ruby. After gems installation you can try to run a Rake task by clicking Run rake task. In the opened dialog, you can provide some parameters and click OK - this will be equivalent to running the rake utility with the specified parameters in the command line.
Rake is a popular task runner for Ruby and Rails applications. For example, Rails provides the predefined Rake tasks for creating databases, running migrations, and performing tests. You can also create custom tasks to automate specific actions - run code analysis tools, backup databases, and so on.
In any Rails application you can see which rake tasks are available - either by running rake -AT (or rake --all --tasks) to see all tasks, or rake -T (or rake --tasks ) to see all tasks with descriptions.
You forgot to add your new rake
to the current Rake Application:
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
rake = Rake::Application.new
Rake.application = rake
rake.init
rake.load_rakefile
rake[:hello].invoke
or just
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
Rake.application.init
Rake.application.load_rakefile
Rake.application[:hello].invoke
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With