|
[ruby-list:43021] Open3: msg#00006lang.ruby.japanese
大原です。 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-cj7TXg5MjN14Eiagz67IpQ@xxxxxxxxxxxxxxxx>
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:43020] [ANN] 日本Rubyの忘年会2006、参加者募集のお知らせ, MOROHASHI Kyosuke |
|---|---|
| Next by Date: | [ruby-list:43022] 26.chr, Shunsuke Takenaka |
| Previous by Thread: | [ruby-list:43020] [ANN] 日本Rubyの忘年会2006、参加者募集のお知らせ, MOROHASHI Kyosuke |
| Next by Thread: | [ruby-list:43022] 26.chr, Shunsuke Takenaka |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |