Path 通过系统执行其他Rake任务的Rake任务失败——没有要加载的文件';耙子';

Path 通过系统执行其他Rake任务的Rake任务失败——没有要加载的文件';耙子';,path,load,system,rake,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 "fo

我已经编写了一个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
我将一个puts$:放入/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

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

检查以确保您的安装已正确设置所需的环境变量。
在使用“export-RUBYOPT=RUBYGEM”而不是“export-RUBYOPT=RUBYGEM”时,我也遇到了同样的问题。啊,如果您真的试图从另一个rake任务调用一个rake任务,那么单个字符可以产生的差异。

。为什么不这样做呢?“Rake::Task['jobs:bar'].invoke”。您甚至可以在循环中执行此操作,例如一个数组#每个数组都会更改环境变量,等等。我以前在tasks中做过此操作


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

谢谢你的建议,但不幸的是,这似乎不是它。rake可执行文件本身并不需要“rubygems”位,加载路径确认rubygems正在完成它的工作,只是在两种上下文中有点不同。我很确定你认为这是环境的问题是对的,但我一辈子都不知道哪一个是问题所在。因为我需要将ActiveRecord::Base绑定到另一个数据库,当然,你自己也告诉我不要使用establish_connection来显式地做这件事,而仅仅更改环境变量并不能改变这一点,它也不会重做任何其他特定于环境变量的初始化。