Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

'use ActionController::VerbPiggybacking' brakes multipart forms with Passenger

#1668

Rails does not handle multipart forms unless I disable 'use ActionController::VerbPiggybacking' in middlewares.rb. Platform: Ubuntu 8.10 with the latest REE, Passenger 2.0.6 and 2.1.0 (Edge).

/!\ FAILSAFE /!\ 2008. december 30., 01:37 Status: 500 Internal Server Error no content body

/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/request_parser.rb:225:in `read_multipart'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/request_parser.rb:153:in `parse_multipart_form_parameters'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/request_parser.rb:67:in `parse_formatted_request_parameters'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/request_parser.rb:8:in `request_parameters'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/request.rb:438:in `request_parameters'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/request.rb:397:in `parameters'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/base.rb:1221:in `assign_shortcuts'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/base.rb:521:in `process_without_filters'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/filters.rb:606:in `sass_old_process'
/opt/ruby-enterprise-1.8.6-20081215/lib/ruby/gems/1.8/gems/haml-2.0.6/rails/../lib/sass/plugin/rails.rb:19:in `process'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/rescue.rb:65:in `call_with_exception'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:66:in `dispatch'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:86:in `_call'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:57:in `initialize'
/home/nagybence/dev/moly/vendor/rails/railties/lib/rails/rack/metal.rb:32:in `call'
/home/nagybence/dev/moly/vendor/rails/railties/lib/rails/rack/metal.rb:32:in `call'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/verb_piggybacking.rb:21:in `call'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/session/cookie_store.rb:95:in `call'
/home/nagybence/dev/moly/vendor/rails/activerecord/lib/active_record/query_cache.rb:29:in `call'
/home/nagybence/dev/moly/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache'
/home/nagybence/dev/moly/vendor/rails/activerecord/lib/active_record/query_cache.rb:9:in `cache'
/home/nagybence/dev/moly/vendor/rails/activerecord/lib/active_record/query_cache.rb:28:in `call'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/failsafe.rb:11:in `call'
/home/nagybence/dev/moly/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:81:in `call'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/rack/request_handler.rb:65:in `process_request'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_request_handler.rb:204:in `main_loop'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/railz/application_spawner.rb:331:in `start_request_handler'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/railz/application_spawner.rb:294:in `handle_spawn_application'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/utils.rb:180:in `safe_fork'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/railz/application_spawner.rb:292:in `handle_spawn_application'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server.rb:332:in `__send__'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server.rb:332:in `main_loop'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server.rb:182:in `start_synchronously'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server.rb:149:in `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/railz/application_spawner.rb:187:in `start'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/spawn_manager.rb:260:in `spawn_rails_application'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server_collection.rb:121:in `lookup_or_add'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/spawn_manager.rb:254:in `spawn_rails_application'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server_collection.rb:75:in `synchronize'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server_collection.rb:74:in `synchronize'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/spawn_manager.rb:253:in `spawn_rails_application'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/spawn_manager.rb:148:in `spawn_application'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/spawn_manager.rb:285:in `handle_spawn_application'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server.rb:332:in `__send__'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server.rb:332:in `main_loop'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/lib/passenger/abstract_server.rb:182:in `start_synchronously'
/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.1.0/bin/passenger-spawn-server:46

Reported by Bence Nagy · December 30th, 2008 @ 01:30 AM

State: resolved
Milestone: none
Assigned to: josh josh
Importance: none

Activity

  1. josh
    josh
    • Milestone cleared.
    • State changed from new to open
    • Assigned user set to josh

    This is a critical bug and I want to get it fixed ASAP. I just need a little bit more information. Is there anyway you can put together a unit test case?

    December 30th, 2008 @ 03:48 AM

  2. Bence Nagy
    Bence Nagy

    Sorry I can not say more closer. It works if I delete 'req.parameters[:_method]' in verb_piggybacking.rb (line: #13 Allow SEO friendly resources (ex. /my-resources)), so it fails at Request.parameters. And I do not know how to write and run a test under Passenger...

    December 30th, 2008 @ 09:59 AM

  3. Suave Su
    Suave Su

    I met the same issue with rails edge & passenger, but work very well under mongrel at my localhost

    December 31st, 2008 @ 08:07 AM

  4. josh
    josh
    • Tag changed from passenger to multipart, rack

    Added a test to prove this bug: http://github.com/rails/rails/co...

    I still don't have a solid fix yet.

    January 3rd, 2009 @ 12:46 AM

  5. Florian Aßmann
    Florian Aßmann

    I assume the Body got read once and since it's an UnixSocket on some systems this renders the whole POST body invalid (no .rewind) when ActionController tries to dispatch.

    
        /Users/florian/dev/farmfacts/vendor/rails/actionpack/lib/action_controller/request_parser.rb:303:in `read_multipart'
        /Users/florian/dev/farmfacts/vendor/rails/actionpack/lib/action_controller/request_parser.rb:153:in `parse_multipart_form_parameters'
        /Users/florian/dev/farmfacts/vendor/rails/actionpack/lib/action_controller/request_parser.rb:67:in `parse_formatted_request_parameters'
        /Users/florian/dev/farmfacts/vendor/rails/actionpack/lib/action_controller/request_parser.rb:8:in `request_parameters'
        /Users/florian/dev/farmfacts/vendor/rails/actionpack/lib/action_controller/request.rb:438:in `request_parameters'
        /Users/florian/dev/farmfacts/vendor/rails/actionpack/lib/action_controller/request.rb:397:in `parameters'
        /Users/florian/dev/farmfacts/vendor/rails/actionpack/lib/action_controller/verb_piggybacking.rb:15:in `call'
    

    January 4th, 2009 @ 11:41 AM

  6. Florian Aßmann
    Florian Aßmann

    I got a MethodNotAllowed from ActionController::Routing::RouteSet[64] so I learning some more Rails internals where I found something far away from VerbPiggybacking.

    polymorphic_path currently generates wrong paths, imho:

    create_path = polymorphic_path [:admin, record, record.attachments.new]

    Before: /admin/articles/2/attachments

    After: /admin/articles/2

    Well, when an exception is raised at this point the @env got lost somehow in ActionController::Dispatcher[66] and I must correct my habit to first look into the log where, in this case, no information about the requested url can be found, but to look in the browser address bar.

    Now I'll try to get @env inplace...

    January 4th, 2009 @ 12:21 PM

  7. Florian Aßmann
    Florian Aßmann

    Ok, I extended the global rescue hack to get the response back in place.

    January 4th, 2009 @ 12:50 PM

  8. Florian Aßmann
    Florian Aßmann

    polymorphic_path works correctly

    January 4th, 2009 @ 01:13 PM

  9. Florian Aßmann
    Florian Aßmann

    The problem with the already read body still exists:

    
    /!\ FAILSAFE /!\  Sun Jan 04 16:24:33 +0100 2009
      Status: 500 Internal Server Error
      no content body
        /var/www/vendor/rails/actionpack/lib/action_controller/request_parser.rb:225:in `read_multipart'
        /var/www/vendor/rails/actionpack/lib/action_controller/request_parser.rb:153:in `parse_multipart_form_parameters'
        /var/www/vendor/rails/actionpack/lib/action_controller/request_parser.rb:67:in `parse_formatted_request_parameters'
        /var/www/vendor/rails/actionpack/lib/action_controller/request_parser.rb:8:in `request_parameters'
        /var/www/vendor/rails/actionpack/lib/action_controller/request.rb:438:in `request_parameters'
        /var/www/vendor/rails/actionpack/lib/action_controller/request.rb:397:in `parameters'
        /var/www/vendor/rails/actionpack/lib/action_controller/base.rb:1221:in `assign_shortcuts'
        /var/www/vendor/rails/actionpack/lib/action_controller/base.rb:521:in `process_without_filters'
        /var/www/vendor/rails/actionpack/lib/action_controller/filters.rb:606:in `sass_old_process'
        /var/www/vendor/gems/haml-2.0.6/rails/../lib/sass/plugin/rails.rb:19:in `process'
        /var/www/vendor/rails/actionpack/lib/action_controller/rescue.rb:65:in `call_with_exception'
        /var/www/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:66:in `dispatch'
        /var/www/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:86:in `_call'
        /var/www/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:57:in `initialize'
        /var/www/vendor/rails/railties/lib/rails/rack/metal.rb:32:in `call'
        /var/www/vendor/rails/railties/lib/rails/rack/metal.rb:32:in `call'
        /var/www/vendor/rails/actionpack/lib/action_controller/verb_piggybacking.rb:21:in `call'
    

    January 4th, 2009 @ 03:49 PM

  10. Repository
    Repository
    • State changed from open to resolved

    (from [f00e86d7e9c7a4689a49fc085bcb757c5a2c0b03]) Memoize request accessors on the Rack env so other request objects have access to the same cache [#1668 'use ActionController::VerbPiggybacking' brakes multipart forms with Passenger state:resolved] http://github.com/rails/rails/co...

    January 4th, 2009 @ 06:13 PM