Hi Scott, >From the first line of your stack trace you can see the request method is actually OPTIONS which is a preflight CORS request:
*Processing ApplicationController#index (for xx.xxx.xx.xxx at 2014-10-22 14:31:28) [OPTIONS]* The application needs to send a response for the OPTIONS request first, and then the PUT request will be sent. Here is an example of setting up CORS headers in a rails app: http://stackoverflow.com/questions/17858178/allow-anything-through-cors-policy. In development most likely everything is running on localhost, so it's not considered cross-domain and the OPTIONS request would not be sent. - Mike On Wed, Oct 22, 2014 at 3:35 PM, Scott Olmsted <[email protected]> wrote: > A client with a Rails 2 app that displays games written in Flash is having > them converted to HTML5/Javascript. The team doing the conversions has no > problem reading the player's data with a Javascript function like this, > which I bound to a button click and ran with the Chrome debugging console > open: > > >> *function makeGetRequest() {* >> * var request = new XMLHttpRequest();** request.open('GET', >> <...url...>);* >> >> * // Response handler* >> * request.onload = function() {* >> * var text = request.responseText;* >> * console.log("responseText="+text)** };* >> >> * request.send();**}* > > > I have omitted the code to handle CORS (cross-origin resource sharing), > which is set in .htaccess on the server and does not seem to be a problem. > > The following works in development to push data back to the Rails 2 app: > > >> *function makePutRequest() {* >> * var request = new XMLHttpRequest();** request.open('PUT', >> <...url...>);* >> >> * // Response handler* >> * request.onload = function() {* >> * var text = request.responseText;* >> * console.log("responseText="+text)** };* >> >> * request.setRequestHeader('Content-type', 'application/json');* >> * request.send('{"data":"this is updated data player data"}');**}* > > > but does not work in production. Changing 'PUT' to 'POST' and adding > > * xhr.setRequestHeader('X-HTTP-Method-Override', 'PUT');* > > > also works in development but not in production. > > The Chrome console says: > > *XMLHttpRequest cannot load <...url...>. Invalid HTTP status code 405 * > > > The Rails 2 production log says: > > >> *Processing ApplicationController#index (for xx.xxx.xx.xxx at 2014-10-22 >> 14:31:28) [OPTIONS]ActionController::MethodNotAllowed (Only get and put >> requests are allowed.):* > > >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> * >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/routing/recognition_optimisation.rb:64:in >> `recognize_path' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/routing/route_set.rb:442:in >> `recognize' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/routing/route_set.rb:437:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/dispatcher.rb:87:in >> `dispatch' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/dispatcher.rb:121:in >> `_call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/dispatcher.rb:130:in >> `build_middleware_stack' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/activerecord/lib/active_record/query_cache.rb:29:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/activerecord/lib/active_record/query_cache.rb:29:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in >> `cache' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/activerecord/lib/active_record/query_cache.rb:9:in >> `cache' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/activerecord/lib/active_record/query_cache.rb:28:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:361:in >> `call' haml (3.0.25) rails/./lib/sass/plugin/rack.rb:41:in `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/string_coercion.rb:25:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/params_parser.rb:15:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/session/cookie_store.rb:99:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/failsafe.rb:26:in >> `call' >> /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems/rails-31a564b77c73/actionpack/lib/action_controller/dispatcher.rb:106:in >> `call' passenger (3.0.12) >> lib/phusion_passenger/rack/request_handler.rb:96:in `process_request'* > > > > It got as far as actionpack, so why is production behaving badly but not > development? Is Apache/Passenger mangling the request before it gets there? > > The app uses the latest version of Rails 2, ree-1.8.7, and Passenger, > hosted at RailsPlayground, where it has run without major problems for five > years. > > I'm at a dead-end with Google. Anyone got an idea on what is the problem > here? > > Thanks much, Scott > > -- > -- > SD Ruby mailing list > [email protected] > http://groups.google.com/group/sdruby > --- > You received this message because you are subscribed to the Google Groups > "SD Ruby" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby --- You received this message because you are subscribed to the Google Groups "SD Ruby" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
