通过系统执行其他rake任务的Rake任务失败 - 没有这样的文件加载'rake'

时间:2010-11-15 15:50:11

标签: path load system rake

我已经编写了一个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

这可能解释了加载错误,但不是原因。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

检查以确保您的安装已正确设置所需的环境变量。 http://docs.rubygems.org/read/chapter/3 使用“export RUBYOPT = RUBYGEM”而不是“export RUBYOPT = RUBYGEMS”时,我遇到了同样的问题。啊,一个角色可以做出的差异。

答案 1 :(得分:0)

如果您真的想从另一个rake任务调用rake任务。为什么不这样做? “回扣::任务。[ '工作:酒吧']调用”。你甚至可以在一个循环中完成它,例如一个更改ENV变量的数组#等等。我之前在任务中完成了这个。

但是,如果你的例子是人为的,而你并没有真正调用一个任务,只是问为什么子shell有不同的PATH设置,我不知道。也许如果它很难,那么它暗示它应该以另一种方式完成。