我已经编写了一个rake任务来通过系统运行一些其他rake任务(以便将ActiveRecord绑定到不同的数据库等)。它在我的OS X盒子上工作正常,但在我们的生产Linux盒子上因加载错误而失败。这些任务可以归结为:
namespace :jobs do
task :foo => :environment do
system "rake jobs:bar"
end
task :bar => :environment do
puts "foobar"
end
,跟踪输出为:
-bash-3.2$ rake jobs:foo --trace
(in /the/path)
** Invoke jobs:foo (first_time)
** Invoke environment (first_time)
** Execute environment
** Erubis 2.6.6
** Execute jobs:foo
/usr/bin/rake:19:in `load': no such file to load -- rake (LoadError)
from /usr/bin/rake:19
我将一个put $:转入/ usr / bin / rake并发现了一些有趣的东西。主要作业有一个包含这两个路径的加载路径:
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/bin
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib
,而辅助作业的加载路径仅包含:
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib
这可能解释了加载错误,但不是原因。有什么想法吗?
答案 0 :(得分:0)
检查以确保您的安装已正确设置所需的环境变量。 http://docs.rubygems.org/read/chapter/3 使用“export RUBYOPT = RUBYGEM”而不是“export RUBYOPT = RUBYGEMS”时,我遇到了同样的问题。啊,一个角色可以做出的差异。
答案 1 :(得分:0)
如果您真的想从另一个rake任务调用rake任务。为什么不这样做? “回扣::任务。[ '工作:酒吧']调用”。你甚至可以在一个循环中完成它,例如一个更改ENV变量的数组#等等。我之前在任务中完成了这个。
但是,如果你的例子是人为的,而你并没有真正调用一个任务,只是问为什么子shell有不同的PATH设置,我不知道。也许如果它很难,那么它暗示它应该以另一种方式完成。