Heroku NoMethod error, remember_token=
Asked Answered
P

1

5

My App works without any problem locally, but as soon as I push it to Heroku the logs show a NoMethodError. Looking through my code, I do not really see what I am missing right away. Especially, why would it work locally but on Heroku it would throw a NoMethod?

Error

Started POST "/users" for <IP>
Processing by UsersController#create as HTML
Completed 500 Internal Server Error in 102ms

app/models/user.rb:38:in `create_remember_token'
app/controllers/users_controller.rb:28:in `create'

NoMethodError (undefined method `remember_token=' for #<User:0x000000052e8fb0>):

user.rb

class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation, :image
has_secure_password
has_many :microposts, dependent: :destroy
mount_uploader :image, AvatarUploader

before_save { |user| user.email = email.downcase }
before_save :create_remember_token

validates :name, presence: true,
        length: { maximum: 50}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
        format: { with: VALID_EMAIL_REGEX },
        uniqueness: { case_sensitive: false }

validates :password, length: {minimum: 6}
validates :password_confirmation, presence: true


private
def create_remember_token
  self.remember_token = SecureRandom.urlsafe_base64
end

user_controller.rb

class UsersController < ApplicationController
before_filter :signed_in_user, only: [:index, :edit, :update, :destroy]
before_filter :correct_user,   only: [:edit, :update]
before_filter :admin_user,     only: :destroy


def index
  @users = User.paginate(page: params[:page])
end

def show
  @user = User.find(params[:id])
  @microposts = @user.microposts.paginate(page: params[:page])
end

def new
  @user = User.new
end

def destroy
  User.find(params[:id]).destroy
  flash[:success] = "User destroyed."
  redirect_to users_path
end

def create
  @user = User.new(params[:user])
  if @user.save
  sign_in @user
  flash[:success] = "Welcome to El Beano"
  redirect_to @user
else
  render 'new'
  end
end

def edit
  @user = User.find(params[:id])
end

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:success] = 'Profile updated'
    sign_in @user
    redirect_to @user
  else
    render 'edit'
  end
end

private


  def correct_user
    @user = User.find(params[:id])
    redirect_to(root_path) unless current_user?(@user)
  end

  def admin_user
    redirect_to(root_path) unless current_user.admin?
  end
end
Parlay answered 10/5, 2012 at 5:16 Comment(0)
A
3

It looks as it you've uploaded your code to Heroku but the database migration that created that column was not run or did not run correctly.

Can you verify that the column is there?

Also, have you tried logging to a console session on your heroku instance:

heroku run bash --app my_app
bundle exec rails c

Then testing that you can access that property in that environment?

Algy answered 10/5, 2012 at 5:19 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.