任务中有一个“有趣的”段错误rake
。从命令行按照此处引用的方式运行时,它可以正常工作。如果我rake
从一个system
调用中运行所有任务,我会得到一个段错误。
task :cruise do
system 'rake db:reset db:test:clone teabag'
system 'rake spec'
end
对于那些不熟悉它的人,Teabag是“一个建立在 Rails 之上的 JavaScript 测试运行器”。所以我们这里基本上是:
- 重新初始化(开发)数据库
- 从已知状态开发数据库中克隆测试数据库;和
- 运行 {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
我的Gemfile
和Gemfile.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
任务中运行而不调用reenable
before时会可靠地发生段错误invoke
。但我有解决方法,所以我认为问题已回答。