タスクに「興味深い」セグメンテーション違反があるrake
。ここで引用されているようにコマンドラインから実行すると、正常に動作します。1 回の呼び出しですべてのrake
タスクを実行するsystem
と、segfault が発生します。
task :cruise do
system 'rake db:reset db:test:clone teabag'
system 'rake spec'
end
なじみのない方のために説明すると、Teabagは「Rails 上に構築された JavaScript テスト ランナー」です。したがって、ここにあるのは基本的に次のとおりです。
- (開発用) データベースを再初期化する
- 既知の状態の開発データベースからテスト データベースを複製します。と
- {Java,Coffee} スクリプトと 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
は、この Gistにあります。クラッシュ ダンプを含むタスクの出力は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 segfault を排除するために追加しなければならなかったことに注意してください)。
これは、(元の-calling タスクrake
のように) マルチタスク コマンド ラインの一部として実行された場合、またはbeforeを呼び出さずに作り直されたタスクで実行された場合に、RSpec が確実に segfault する理由をまだ解決していません。しかし、回避策があるので、質問は回答済みだと思います。system
cruise
reenable
invoke