Path 通过系统执行其他Rake任务的Rake任务失败——没有要加载的文件';耙子';
我已经编写了一个rake任务来通过系统运行一些其他rake任务(以便将ActiveRecord绑定到不同的数据库,等等)。它在我的OS X机器上运行良好,但在我们的生产Linux机器上由于加载错误而失败。这些任务可以简单地归结为: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
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来显式地做这件事,而仅仅更改环境变量并不能改变这一点,它也不会重做任何其他特定于环境变量的初始化。