2009-05-02 2 views
8

У меня есть приложение rails, работающее в режиме разработки (с базой данных sqlite). Цель приложения - разрешить пользователям загружать файлы через java-клиент.Что может быть причиной этого рельса ioerror закрытого потока?

Если пользователь хочет загрузить папку, все файлы внутри нее будут рекурсивно загружены. Если пользователь хочет загрузить файл, файл будет загружен в обычном режиме.

Вот ошибка я получаю:


IOError 

    in UploadedFilesController#new 

closed stream 

Вот приложение следа:


/usr/lib/ruby/1.8/tempfile.rb:167:in `close' 
/usr/lib/ruby/1.8/tempfile.rb:167:in `callback' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/vendor/builder-2.1.2/blankslate.rb:85:in `call' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/vendor/builder-2.1.2/blankslate.rb:85:in `method_added' 
app/controllers/uploaded_files_controller.rb:114 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in `load_without_new_constant_marking' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in `load_file' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:202:in `load_file' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:94:in `require_or_load' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:248:in `load_missing_constant' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:453:in `const_missing' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:465:in `const_missing' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/inflector.rb:257:in `constantize' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/core_ext/string/inflections.rb:148:in `constantize' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/routing.rb:1426:in `recognize' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:78:in `service' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/commands/servers/webrick.rb:66 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39 

Вот основа следа:


/usr/lib/ruby/1.8/tempfile.rb:167:in `close' 
/usr/lib/ruby/1.8/tempfile.rb:167:in `callback' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/vendor/builder-2.1.2/blankslate.rb:85:in `call' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/vendor/builder-2.1.2/blankslate.rb:85:in `method_added' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:170:in `handle_request' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in `dispatch_cgi' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:112:in `handle_dispatch' 
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service' 
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' 
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' 
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' 
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each' 
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:62:in `dispatch' 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
script/server:3 

Вот полный след :


/usr/lib/ruby/1.8/tempfile.rb:167:in `close' 
/usr/lib/ruby/1.8/tempfile.rb:167:in `callback' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/vendor/builder-2.1.2/blankslate.rb:85:in `call' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/vendor/builder-2.1.2/blankslate.rb:85:in `method_added' 
app/controllers/uploaded_files_controller.rb:114 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in `load_without_new_constant_marking' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in `load_file' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:202:in `load_file' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:94:in `require_or_load' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:248:in `load_missing_constant' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:453:in `const_missing' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:465:in `const_missing' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/inflector.rb:257:in `constantize' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/core_ext/string/inflections.rb:148:in `constantize' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/routing.rb:1426:in `recognize' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:170:in `handle_request' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in `dispatch_cgi' 
/var/lib/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:112:in `handle_dispatch' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:78:in `service' 
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service' 
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' 
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' 
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' 
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each' 
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start' 
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:62:in `dispatch' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/commands/servers/webrick.rb:66 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in' 
/var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require' 
/var/lib/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
script/server:3 

Я не знаю, почему это происходит ... клиент получает возможность загружать около 15-30 файлов (из папки через java-клиент) до появления этой ошибки. Я запускаю Rails 2.0.2. Может ли этот факт работать в режиме разработки с использованием sqlite в качестве базы данных? Любая помощь будет принята с благодарностью!

Спасибо, ребята!

ответ

2

Я думаю, что я понял это, по крайней мере, я думаю, что я делаю (клиент просто продолжает загружать сейчас, без ошибок). После того, как вы прочитали данные из загружаемого файла, вы также должны указать ЗАКРЫТЬ. Кто бы мог подумать? : P

+1

Я согласен, но вы знаете, почему это имеет значение? Вы каким-то образом исчерпали пространство? –

+0

@JosephHolsten Хороший вопрос! Я хотел бы знать то же самое! –

2

Мы столкнулись с этой же проблемой с нашим Rails-приложением, хотя простое закрытие объекта файла не сработало для нас (мы используем Paperclip, и он закрывает файл). Я разработал monkeypatch для класса Tempfile, который исправил его для нас, и мы используем его как инициализатор Rails.

Вы можете получить его от http://github.com/jwinky/ruby_tempfile_ioerror

+0

Спасибо! Вы спасли меня много времени. – weston

+0

У меня такая же проблема. Использовал патч обезьяны сверху, но это не помогло. Любые другие идеи? –

Смежные вопросы