[#43032] 「何もない(nil)」+「何か(v)」→「何か(v)」 — take_tk <ggb03124@...>
たけ(tk)です
9 messages
2006/12/11
[#43033] Re: 「何もない(nil)」+「何か(v)」→「何か(v)」
— Yukihiro Matsumoto <matz@...>
2006/12/11
まつもと ゆきひろです
[#43042] はじめまして — "hiroshi kamata" <hiroshi_kamata@...>
11月22日の朝日新聞夕刊をみて興味をもったものです。
6 messages
2006/12/13
[#43064] soap4rでの送信フォーマット変更 — "中田雅美" <mimiger2007@...>
はじめまして、本日登録しました中田と申します。
4 messages
2006/12/18
[ruby-list:43021] Open3
From:
OHARA Shigeki <os@...>
Date:
2006-12-08 10:16:12 UTC
List:
ruby-list #43021
大原です。
Open3 を使っていて気になった点がありましたので報告します。
Open3 と ActiveRecord を使っているときに、
Open3 でコマンド起動に失敗すると、
それ以降 ActiveRecord の検索が失敗するという現象が起こりました。
具体的には、こんなスクリプト
% cat foo.rb
#!/usr/local/bin/ruby
require "rubygems"
require_gem "activerecord"
require "open3"
class Foo < ActiveRecord::Base; end
Foo.establish_connection(:adapter => "mysql", :database => "foo",
:user => "user", :password => "password")
Foo.find_first
Open3::popen3("nonexistent")
sleep 1
Foo.find_first
を実行すると、 2回目の AR::find で下記のようなエラーとなりました。
% ruby -v
ruby 1.8.5 (2006-08-25) [i386-freebsd6]
% mysql --version
mysql Ver 14.12 Distrib 5.0.27, for portbld-freebsd6.1 (i386) using 5.0
% ruby foo.rb
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/abstract_adapter.rb:120:in `log': Mysql::Error: MySQL server has gone away: SELECT * FROM foos LIMIT 1 (ActiveRecord::StatementInvalid)
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/mysql_adapter.rb:184:in `execute'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/mysql_adapter.rb:336:in `select'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/mysql_adapter.rb:175:in `select_all'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:390:in `find_by_sql'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:924:in `find_every'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:918:in `find_initial'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:380:in `find'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/deprecated_finders.rb:22:in `find_first'
from foo.rb:11
fork した子が exec 失敗後に終了する際に
ActiveRecord 的な後始末を行ってしまっておかしくなっているのかなと推測し、
open3.rb に下記のような修正を行ってみたところ、
この現象は無くなりました。
どうするのが正しい対処法なのかわからなかったのですが、
とりあえず御報告まで。
--- /usr/local/lib/ruby/1.8/open3.rb Sat Aug 5 07:00:21 2006
+++ open3.rb Wed Dec 6 18:44:30 2006
@@ -45,7 +45,11 @@
STDERR.reopen(pe[1])
pe[1].close
- exec(*cmd)
+ begin
+ exec(*cmd)
+ ensure
+ exit!(0)
+ end
}
exit!(0)
}
----
OHARA Shigeki (大原 重樹) <os@iij.ad.jp>