I posted this to the Rails Talk list but no one responded. I'm not
exactly sure what "rails core" is defined as -- this problem is deep
inside activesupport, can be reproduced in seconds on a fresh new
Rails app, and I think setting the format request seems pretty "core"
to the platform to me, so I'm still not sure if this is the right list
but it seem like this is in fact a Rails core problem.

I'm gonna re-post here to see if anyone has an answer. At a very
minimum, can someone try to reproduce these steps (it's very easy) and
just tell me if they get the same bug. Thanks. Seems like the feature
should work out of the box but I'm getting this totally mysterious bug
that doesn't show a stack trace to any line of code inside my app.


I have a strange problem with setting request.format = :mobile

I can reproduce this problem on a completely fresh Rails 3.0.7 app
with no special gems. This seemed to work well in Rails 2 but for some
reason is hiccuping here, not sure what's different in Rails 3 that
makes this hiccup. If you look at the stack track, it doesn't even
pass through my app stack once -- weird -- maybe this is a problem
with Passenger? Anyone see anything i'm doing wrong here? Your tips
are much appreciated, this is baffling me.

Step-by-step instructions to reproduce:

Totally fresh rails app (rails new test_mobile), then go delete
public/
index.html

routes.rb __________________________________

TestMobile::Application.routes.draw do
 root :to => "application#welcome"
end

application_controller.rb __________________________

class ApplicationController < ActionController::Base
 protect_from_forgery

 def welcome
   render "welcome/index"
 end

 before_filter :check_mobile

 def check_mobile
   request.format = :mobile if request.env["HTTP_USER_AGENT"] =~ /
iPhone/
 end
end



views/welcome/index.html.erb ______________________________________

this is my regular site




views/welcome/index.mobile.erb ____________________________________

this is my mobile site




That's it -- those are all the steps one needs to take to reproduce
this, no gem configuration necessary.

Set it up with Passenger (as test-mobile.local), go to Safrai, load
test-mobile.local, you get "this is my regular site". Then switch
Develop > User Agent to "Safari iOS 4.1", reload the page, and bam:




NoMethodError in ApplicationsController#welcome

undefined method `ref' for nil:NilClass
Rails.root: /Users/jason/Projects/DEVELOPMENT/ROR/test_mobile

Application Trace | Framework Trace | Full Trace
activesupport (3.0.7) lib/active_support/whiny_nil.rb:48:in
`method_missing'
actionpack (3.0.7) lib/action_controller/metal/rendering.rb:10:in
`process_action'
actionpack (3.0.7) lib/action_controller/metal/rendering.rb:10:in
`map'
actionpack (3.0.7) lib/action_controller/metal/rendering.rb:10:in
`process_action'
actionpack (3.0.7) lib/abstract_controller/callbacks.rb:18:in
`process_action'
activesupport (3.0.7) lib/active_support/callbacks.rb:441:in
`_run__2115867319__process_action__733682996__callbacks'
activesupport (3.0.7) lib/active_support/callbacks.rb:410:in `send'
activesupport (3.0.7) lib/active_support/callbacks.rb:410:in
`_run_process_action_callbacks'
activesupport (3.0.7) lib/active_support/callbacks.rb:94:in `send'
activesupport (3.0.7) lib/active_support/callbacks.rb:94:in
`run_callbacks'
actionpack (3.0.7) lib/abstract_controller/callbacks.rb:17:in
`process_action'
actionpack (3.0.7) lib/action_controller/metal/instrumentation.rb:
30:in `process_action'
activesupport (3.0.7) lib/active_support/notifications.rb:52:in
`instrument'
activesupport (3.0.7) lib/active_support/notifications/instrumenter.rb:
21:in `instrument'
activesupport (3.0.7) lib/active_support/notifications.rb:52:in
`instrument'
actionpack (3.0.7) lib/action_controller/metal/instrumentation.rb:
29:in `process_action'
actionpack (3.0.7) lib/action_controller/metal/rescue.rb:17:in
`process_action'
actionpack (3.0.7) lib/abstract_controller/base.rb:119:in `process'
actionpack (3.0.7) lib/abstract_controller/rendering.rb:41:in
`process'
actionpack (3.0.7) lib/action_controller/metal.rb:138:in `dispatch'
actionpack (3.0.7) lib/action_controller/metal/rack_delegation.rb:
14:in `dispatch'
actionpack (3.0.7) lib/action_controller/metal.rb:178
actionpack (3.0.7) lib/action_dispatch/routing/route_set.rb:62:in
`call'
actionpack (3.0.7) lib/action_dispatch/routing/route_set.rb:62:in
`dispatch'
actionpack (3.0.7) lib/action_dispatch/routing/route_set.rb:27:in
`call'
rack-mount (0.6.14) lib/rack/mount/route_set.rb:148:in `call'
rack-mount (0.6.14) lib/rack/mount/code_generation.rb:93:in
`recognize'
rack-mount (0.6.14) lib/rack/mount/code_generation.rb:68:in
`optimized_each'
rack-mount (0.6.14) lib/rack/mount/code_generation.rb:92:in
`recognize'
rack-mount (0.6.14) lib/rack/mount/route_set.rb:139:in `call'
actionpack (3.0.7) lib/action_dispatch/routing/route_set.rb:493:in
`call'
actionpack (3.0.7) lib/action_dispatch/middleware/
best_standards_support.rb:17:in `call'
actionpack (3.0.7) lib/action_dispatch/middleware/head.rb:14:in `call'
rack (1.2.2) lib/rack/methodoverride.rb:24:in `call'
actionpack (3.0.7) lib/action_dispatch/middleware/params_parser.rb:
21:in `call'
actionpack (3.0.7) lib/action_dispatch/middleware/flash.rb:182:in
`call'
actionpack (3.0.7) lib/action_dispatch/middleware/session/
abstract_store.rb:149:in `call'
actionpack (3.0.7) lib/action_dispatch/middleware/cookies.rb:302:in
`call'
activerecord (3.0.7) lib/active_record/query_cache.rb:32:in `call'
activerecord (3.0.7) lib/active_record/connection_adapters/abstract/
query_cache.rb:28:in `cache'
activerecord (3.0.7) lib/active_record/query_cache.rb:12:in `cache'
activerecord (3.0.7) lib/active_record/query_cache.rb:31:in `call'
activerecord (3.0.7) lib/active_record/connection_adapters/abstract/
connection_pool.rb:354:in `call'
actionpack (3.0.7) lib/action_dispatch/middleware/callbacks.rb:46:in
`call'
activesupport (3.0.7) lib/active_support/callbacks.rb:416:in
`_run_call_callbacks'
actionpack (3.0.7) lib/action_dispatch/middleware/callbacks.rb:44:in
`call'
rack (1.2.2) lib/rack/sendfile.rb:107:in `call'
actionpack (3.0.7) lib/action_dispatch/middleware/remote_ip.rb:48:in
`call'
actionpack (3.0.7) lib/action_dispatch/middleware/show_exceptions.rb:
47:in `call'
railties (3.0.7) lib/rails/rack/logger.rb:13:in `call'
rack (1.2.2) lib/rack/runtime.rb:17:in `call'
activesupport (3.0.7) lib/active_support/cache/strategy/local_cache.rb:
72:in `call'
rack (1.2.2) lib/rack/lock.rb:11:in `call'
rack (1.2.2) lib/rack/lock.rb:11:in `synchronize'
rack (1.2.2) lib/rack/lock.rb:11:in `call'
actionpack (3.0.7) lib/action_dispatch/middleware/static.rb:30:in
`call'
railties (3.0.7) lib/rails/application.rb:168:in `call'
railties (3.0.7) lib/rails/application.rb:77:in `send'
railties (3.0.7) lib/rails/application.rb:77:in `method_missing'
passenger (3.0.7) lib/phusion_passenger/rack/request_handler.rb:96:in
`process_request'
passenger (3.0.7) lib/phusion_passenger/abstract_request_handler.rb:
513:in `accept_and_process_next_request'
passenger (3.0.7) lib/phusion_passenger/abstract_request_handler.rb:
274:in `main_loop'
passenger (3.0.7) lib/phusion_passenger/rack/application_spawner.rb:
205:in `start_request_handler'
passenger (3.0.7) lib/phusion_passenger/rack/application_spawner.rb:
170:in `send'
passenger (3.0.7) lib/phusion_passenger/rack/application_spawner.rb:
170:in `handle_spawn_application'
passenger (3.0.7) lib/phusion_passenger/utils.rb:479:in `safe_fork'
passenger (3.0.7) lib/phusion_passenger/rack/application_spawner.rb:
165:in `handle_spawn_application'
passenger (3.0.7) lib/phusion_passenger/abstract_server.rb:357:in
`__send__'
passenger (3.0.7) lib/phusion_passenger/abstract_server.rb:357:in
`server_main_loop'
passenger (3.0.7) lib/phusion_passenger/abstract_server.rb:206:in
`start_synchronously'
passenger (3.0.7) lib/phusion_passenger/abstract_server.rb:180:in
`start'
passenger (3.0.7) lib/phusion_passenger/rack/application_spawner.rb:
128:in `start'
passenger (3.0.7) lib/phusion_passenger/spawn_manager.rb:253:in
`spawn_rack_application'
passenger (3.0.7) lib/phusion_passenger/abstract_server_collection.rb:
132:in `lookup_or_add'
passenger (3.0.7) lib/phusion_passenger/spawn_manager.rb:246:in
`spawn_rack_application'
passenger (3.0.7) lib/phusion_passenger/abstract_server_collection.rb:
82:in `synchronize'
passenger (3.0.7) lib/phusion_passenger/abstract_server_collection.rb:
79:in `synchronize'
passenger (3.0.7) lib/phusion_passenger/spawn_manager.rb:244:in
`spawn_rack_application'
passenger (3.0.7) lib/phusion_passenger/spawn_manager.rb:137:in
`spawn_application'
passenger (3.0.7) lib/phusion_passenger/spawn_manager.rb:275:in
`handle_spawn_application'
passenger (3.0.7) lib/phusion_passenger/abstract_server.rb:357:in
`__send__'
passenger (3.0.7) lib/phusion_passenger/abstract_server.rb:357:in
`server_main_loop'
passenger (3.0.7) lib/phusion_passenger/abstract_server.rb:206:in
`start_synchronously'
passenger (3.0.7) helper-scripts/passenger-spawn-server:99

Request

Parameters:

{"format"=>"mobile"}
Show session dump

Show env dump

Response

Headers:

None

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to