Jason Fleetwood-Boldt
2011-May-21 01:38 UTC
request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
I''m just trying to set the request format by detecting a mobile user agent. This used to work in Rails 2: request.format = :mobile Just trying to make it render with a "mobile" format home.mobile.html.haml For some reason this causes "undefined method `ref'' for nil:NilClass" somewhere deep inside activesupport --- is this no longer the way to do this in Rails 3? (I''m on 3.0.5) Thanks, Jason -- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Ben Langfeld
2011-May-21 07:54 UTC
Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
This does indeed still work, though you should use home.mobile.haml. If that doesn''t work, I''d suggest posting a full stack trace and code to a more appropriate list (http://groups.google.com/group/rubyonrails-talk) since this one is for core issues. Regards, Ben Langfeld On Sat, May 21, 2011 at 2:38 AM, Jason Fleetwood-Boldt <tech@datatravels.com> wrote:> I''m just trying to set the request format by detecting a mobile user agent. > > This used to work in Rails 2: > > request.format = :mobile > > Just trying to make it render with a "mobile" format > > home.mobile.html.haml > > For some reason this causes "undefined method `ref'' for nil:NilClass" > somewhere deep inside activesupport --- is this no longer the way to do this > in Rails 3? (I''m on 3.0.5) > > Thanks, > Jason > > -- > 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 rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to > rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-core?hl=en. > >-- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Jason Fleetwood-Boldt
2011-May-21 18:14 UTC
Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
Thanks -- didn''t seem to work. I can reproduce this easily on a fresh Rails 3.0.7 app with no gems installed, and the error is buried deep inside of ActiveScaffold so I thought this was the right list. However, I will follow-up with a complete stacktrace and also code on the general list, thanks. -Jason On May 21, 2011, at 3:54 AM, Ben Langfeld wrote:> This does indeed still work, though you should use home.mobile.haml. If that doesn''t work, I''d suggest posting a full stack trace and code to a more appropriate list (http://groups.google.com/group/rubyonrails-talk) since this one is for core issues. > > Regards, > Ben Langfeld > > > On Sat, May 21, 2011 at 2:38 AM, Jason Fleetwood-Boldt <tech@datatravels.com> wrote: > I''m just trying to set the request format by detecting a mobile user agent. > > This used to work in Rails 2: > > request.format = :mobile > > Just trying to make it render with a "mobile" format > > home.mobile.html.haml > > For some reason this causes "undefined method `ref'' for nil:NilClass" somewhere deep inside activesupport --- is this no longer the way to do this in Rails 3? (I''m on 3.0.5) > > Thanks, > Jason > > -- > 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 rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. > > > > -- > 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 rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.-- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Jason FB
2011-May-22 14:26 UTC
Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Michael Koziarski
2011-May-22 18:37 UTC
Re: Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
> 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.The error message you''re receiving is pretty confusing, so there''s definitely something nicer we should do there. However I''m guessing that this isn''t a bug. You have to register a mime type for that extension, or an alias, if you want it to work. Something like: Mime::Type.register_alias "text/html", :mobile If you don''t, then rails can''t tell what mime type to send with the response. -- Cheers Koz -- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Ben Langfeld
2011-May-22 19:41 UTC
Re: Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
This is indeed the issue and the proper solution. Or you could use mobile_fu instead: https://rubygems.org/gems/mobile-fu Regards, Ben Langfeld On Sun, May 22, 2011 at 7:37 PM, Michael Koziarski <michael@koziarski.com>wrote:> > 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. > > The error message you''re receiving is pretty confusing, so there''s > definitely something nicer we should do there. However I''m guessing > that this isn''t a bug. > > You have to register a mime type for that extension, or an alias, if > you want it to work. Something like: > > Mime::Type.register_alias "text/html", :mobile > > If you don''t, then rails can''t tell what mime type to send with the > response. > > > -- > Cheers > > Koz > > -- > 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 rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to > rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-core?hl=en. > >-- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Jason Fleetwood-Boldt
2011-May-23 12:07 UTC
Re: Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
Ahh, yes, confirmed -- this works! Thanks so much. I didn''t realize this was a necessary step. -Jason On May 22, 2011, at 2:37 PM, Michael Koziarski wrote:> The error message you''re receiving is pretty confusing, so there''s > definitely something nicer we should do there. However I''m guessing > that this isn''t a bug. > > You have to register a mime type for that extension, or an alias, if > you want it to work. Something like: > > Mime::Type.register_alias "text/html", :mobile > > If you don''t, then rails can''t tell what mime type to send with the response.-- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Jason Fleetwood-Boldt
2011-May-23 20:20 UTC
Re: Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
Yes, confirmed--- that was the problem, I didn''t (/realize I had to) set the MIME type for mobile in config/initializers/mime_types.rb if the error message could say something like "You need to register the mime type to use for format for :mobile in config/initializers/mime_types.rb" that would be much more helpful. It makes perfect sense, I just didn''t realize I had to do that. Thanks On May 22, 2011, at 2:37 PM, Michael Koziarski wrote:>> 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. > > The error message you''re receiving is pretty confusing, so there''s > definitely something nicer we should do there. However I''m guessing > that this isn''t a bug. > > You have to register a mime type for that extension, or an alias, if > you want it to work. Something like: > > Mime::Type.register_alias "text/html", :mobile > > If you don''t, then rails can''t tell what mime type to send with the response. > > > -- > Cheers > > Koz > > -- > 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 rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. > >-- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Prem Sichanugrist
2011-May-23 20:21 UTC
Re: Re: request.format = :mobile causes error "undefined method `ref'' for nil:NilClass"
Yes, I think we''re trying to call #ref without checking for its presence first. I''ll patch that. :) On May 23, 2011, at 4:20 PM, Jason Fleetwood-Boldt wrote:> Yes, confirmed--- that was the problem, I didn''t (/realize I had to) set the MIME type for mobile in config/initializers/mime_types.rb > > if the error message could say something like "You need to register the mime type to use for format for :mobile in config/initializers/mime_types.rb" that would be much more helpful. It makes perfect sense, I just didn''t realize I had to do that. > > Thanks > > > > On May 22, 2011, at 2:37 PM, Michael Koziarski wrote: > >>> 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. >> >> The error message you''re receiving is pretty confusing, so there''s >> definitely something nicer we should do there. However I''m guessing >> that this isn''t a bug. >> >> You have to register a mime type for that extension, or an alias, if >> you want it to work. Something like: >> >> Mime::Type.register_alias "text/html", :mobile >> >> If you don''t, then rails can''t tell what mime type to send with the response. >> >> >> -- >> Cheers >> >> Koz >> >> -- >> 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 rubyonrails-core@googlegroups.com. >> To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. >> For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. >> >> > > -- > 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 rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. >-- 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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.