Alrighty, Sal. Let’s take a look. - First up, let’s look at the stack trace more closely. We’re getting an error inside the #find_for_authentication method in your User model.
- So let’s go look at the User model. As the name implies, #find_for_authentication is used to find the first matching active user when we need to authenticate a user (to login, etc.) This is a common pattern for auth code because when a user logs in, we only want to be dealing with a single account (even if they have somehow created more than one account with the same email address). That way, whenever you need to interact with the current_user, there’s only one — and you don’t have to write code like `if current_user && current_user.size == 1`. - Another observation: you've defined this method, but you’re not explicitly using it within your model. So, while it’s possible that this method is only used in a controller, it made me think you might be redefining a method originally defined by your auth gem. And, indeed, a quick search for the method name reveals that the method belongs to Devise: https://www.rubydoc.info/github/plataformatec/devise/Devise/Models/Authenticatable/ClassMethods - But, back to the stacktrace and model for a second: the method is trying to find the first active user (using the :email param), but it’s failing. But look at it closely. Line 77 is just an ActiveRecord finder. It’s essentially `User.find(:first, :conditions)`. - So now let’s look at the docs for ActiveRecord in Rails 2.3: https://guides.rubyonrails.org/v2.3.11/active_record_querying.html - Scroll down to section 1.1.2: `Model.find(:first, options) is equivalent to Model.first(options)` - That’s the same ActiveRecord finder your code is using! - So now let’s look at these same docs in Rails 5.2: https://guides.rubyonrails.org/active_record_querying.html - There is no mention of using the :first param with #find. And that’s because later versions of Rails switched to `User.first`. So I think that’s the source of your error. User.find(:first) is no longer support in Rails. To get things working, you would just need to update your ActiveRecord syntax to work with Rails 5.2. def self.find_for_authentication(conditions={}) first.where(conditions, active: true) end But, even simpler, if you look at those Devise docs again, the sample code for customizing #find_for_authentication has changed a bit: def self.find_for_authentication(tainted_conditions) find_first_by_auth_conditions(tainted_conditions, active: true) end It’s using a different ActiveRecord syntax — presumably still valid -- for finding that first record, so that’s an option too. And remember: as you do this upgrade, you’re upgrading Ruby code, Ruby on Rails code, and, in this case, Devise code — so you want to make sure that’s current too. Also, as we discussed in person, I recommend creating a separate, brand-new Rails 5.2 app as you work on the upgrade. You can use that as a test bed for getting working 5.2 code in a completely clean code base with zero legacy issues. So, for instance, it might be worth building out a new Devise implementation for basic authentication in this separate 5.2 app, and then once it’s all working, backport the new auth code into the old app. Good luck! Cheers, Patrick > On Aug 9, 2018, at 6:23 pm, Salvatore McCarty <[email protected]> wrote: > > > Hi Ben, > > I've attached a PDF of the trace and here's a link to a gist with the Gemfile > (and .lock) and the user.rb file that the trace points to. > https://gist.github.com/SalMac86/6dc23b6fe9a090bc12024de3fa723957 > > Thanks!, > > Sal > On Thursday, August 9, 2018 at 4:07:06 PM UTC-7, Benjamin Wanicur wrote: > Hi Sal > > Can you post the error stacktrace and some code ? Or create a Gist ? > > On Thu, Aug 9, 2018 at 2:00 PM Salvatore McCarty <[email protected]> wrote: > Hello, > > It was great meeting all of you and attending the event last Thursday. > > I am still in the midst of the upgrade of that inherited project from Rails > 3.2 to 5.2 and would greatly appreciate any help! > > Right now it seems like something in the controllers has changed, and I'm > getting an invalid number of arguments error for just about everything. > > If anyone wants to connect with me and maybe take a peek, I would be grateful! > > Best, > > Sal > > -- > -- > 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. > <Action Controller_ Exception caught.pdf> -- -- 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.
