Tra*_*der 10 ruby rake ruby-on-rails ruby-on-rails-3.1
虽然这听起来与您在此处找到的其他问题类似,但有一点点扭曲.我有两个目录,比如/ home/rails/Rake和/ home/rails/test_app.rails目录是我放置所有rails项目的地方.
在Rake中,我有一个Rakefile和一个create.rake文件.
这就是我的rakefile看起来像
namespace :setup do
desc "something"
task :init do
print "Name of the destination directory: "
name = STDIN.gets.strip
cp_r '.', "../#{name}/lib/tasks"
cd "../#{name}"
sh "rake setup:create"
end
end
Run Code Online (Sandbox Code Playgroud)
并创建.rake
namespace :setup do
desc "Install"
task :create do
sh 'git init'
#some other code
end
end
Run Code Online (Sandbox Code Playgroud)
它的作用是显而易见的.我想将Rake目录的内容复制到/ test_app/lib/tasks.然后将目录更改为test_app并运行setup:在install.rake文件中定义的create task,该文件现在放在test_app/lib/tasks中.这有效,但这是这样做的耙方式吗?任何人都可以给我一点点暗示它是如何完成的,Rake方式.
这是我使用invoke方法时得到的错误:
$ rake setup:init
Name of the destination directory:
testapp
cp -r . ../testapp/lib/tasks
cd ../testapp
rake aborted!
Don't know how to build task 'setup:create'
/home/TradeRaider/rails/Rake/Rakefile:8:in `block (2 levels) in <top (required)>'
/home/TradeRaider/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `eval'
/home/TradeRaider/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => setup:init
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
apn*_*ing 38
这是更rake-ish :)
Rake::Task["setup:create"].invoke
Run Code Online (Sandbox Code Playgroud)
尽管@apneadiving 的回答有所帮助,但让我震惊的是,我正试图从另一个 Rakefile 中调用 Rakefile,从字面上看。无论如何,要这样做,我必须先加载 rake 文件,
load "../#{name}/lib/tasks/create.rake"
Run Code Online (Sandbox Code Playgroud)
(要求它也能解决问题)
然后调用它。
Rake::Task["setup:create"].invoke
Run Code Online (Sandbox Code Playgroud)