1

任务中有一个“有趣的”段错误rake。从命令行按照此处引用的方式运行时,它可以正常工作。如果我rake从一个system调用中运行所有任务,我会得到一个段错误。

task :cruise do
  system 'rake db:reset db:test:clone teabag'
  system 'rake spec'
end

对于那些不熟悉它的人,Teabag是“一个建立在 Rails 之上的 JavaScript 测试运行器”。所以我们这里基本上是:

  1. 重新初始化(开发)数据库
  2. 从已知状态开发数据库中克隆测试数据库;和
  3. 运行 {Java,Coffee}Script 和 Ruby/Rails 规范。

版本信息:

  • OS X 10.8.2
  • ruby 1.9.3p392(2013-02-22 修订版 39386)[x86_64-darwin12.2.0]
  • 使用rvm
  • 导轨 3.2.12

我的GemfileGemfile.lock这个要点包括故障转储在内的任务输出位于 Pastebin 上

编辑于 2013 年 3 月 5 日 12:20 SGT (GMT+8) *

我将任务重写为

task :cruise do
  ['db:reset', 'db:test:clone', 'teabag', 'spec'].each do |task|
    Rake::Task[task].reenable
    Rake::Task[task].invoke
  end
end

它按预期运行。(请注意,我必须添加Rake::Task[task].reenable以消除 RSpec 段错误)。

这仍然不能回答为什么 RSpec 在作为多任务rake命令行的一部分运行(与原始的system-calling 任务一样)或在重新工作的cruise任务中运行而不调用reenablebefore时会可靠地发生段错误invoke。但我有解决方法,所以我认为问题已回答

4

0 回答 0