Windows のシグナル プロセスに対して active_record が行っていること (Mac の同じバージョンでは見られない) が原因で、奇妙な動作をしているのですか? 例えば:
require 'rubygems'
trap("INT"){puts "interrupted"}
puts __LINE__
sleep 5
require 'active_record'
trap("INT"){puts "interrupted again"}
puts __LINE__
sleep 5
上記のコード (ruby 1.8.6、gem 1.3.1、activerecord 2.2.2) を実行すると、最初のスリープ中に何度でも ^C を押すことができますが、activerecord の要求後の最初の割り込みによって、終了するスクリプト。上記の場合、トラップは引き続き実行されますが、プログラムの続行が許可されないだけです。いつもの。
trap への 2 番目の呼び出しを削除しても、動作には何の影響もありません。
本当の煩わしさは、状況によっては、トラップの実行がまったく失敗することです。これを行うことの全体的なポイントは、コード自体をクリーンアップすることです (データベース内のフットプリントを削除して、次の人が正常な状態を確認できるようにすることです)、これは本当の問題です。例えば:
require 'rubygems'
require 'active_record'
trap("INT"){puts "interrupted"}
puts __LINE__
gets
プットを見た後に ^C を押しても、トラップはまったく実行されません。
この問題は、active_record を要求した後にのみ発生します。回避策はありますか? これがバグなのか、それとも何らかの説明があるのか 知りたいです。私が言ったように、Mac ではこれに問題はありません。繰り返し ^C を実行すると、trap proc が複数回実行されます。
ありがとう...