NameError: uninitialized constant Faker

18,366

Solution 1

Just faced similar issue - I was running

rails g model model_name

and getting the error:

uninitialized constant Faker (NameError)

Problem was due to fact, that I had gem added to test group.

Placing it into development and test group solved the problem:

group :development, :test do
  # ...
  gem 'faker'
  # ...
end

Solution 2

I faced the same issue while writing rspec and adding require 'faker' in spec file solved it.

Share:
18,366

Related videos on Youtube

user1072337
Author by

user1072337

Updated on January 15, 2020

Comments

  • user1072337
    user1072337 over 4 years

    I am trying to run a simple bundle exec rake db:seed for my database in Rails 4. However, when running it, I get the following output:

    ********-C02MGBVJFD57:myapp ***********$ bundle exec rake db:seed
    Your Gemfile lists the gem factory_girl_rails (>= 0) more than once.
    You should probably keep only one of them.
    While it's not a problem now, it could cause errors if you change the version of just one of them later.
    rake aborted!
    NameError: uninitialized constant Faker
    /Users/**********/workspace/myapp/db/seeds.rb:16:in `block in <top (required)>'
    /Users/**********/workspace/myapp/db/seeds.rb:15:in `times'
    /Users/**********/workspace/myapp/db/seeds.rb:15:in `<top (required)>'
    /Users/**********/.rvm/gems/ruby-2.1.2@myapp/gems/railties-4.1.4/lib/rails/engine.rb:543:in `load_seed'
    /Users/**********/.rvm/gems/ruby-2.1.2@myapp/gems/activerecord-4.1.4/lib/active_record/tasks/database_tasks.rb:184:in `load_seed'
    /Users/**********/.rvm/gems/ruby-2.1.2@myapp/gems/activerecord-4.1.4/lib/active_record/railties/databases.rake:173:in `block (2 levels) in <top (required)>'
    Tasks: TOP => db:seed
    (See full trace by running task with --trace)
    

    Here is my seeds.rb file:

    User.create!(
      name:                  "Example User",
      email:                 "[email protected]",
      password:              "foobar",
      password_confirmation: "foobar",
      admin:                 true
    )
    
    99.times do |n|
      name     = Faker::Name.name
      email    = "example-#{n+1}@railstutorial.org"
      password = "password"
      User.create!(
        name:                  name,
        email:                 email,
        password:              password,
        password_confirmation: password
      )
    end
    

    Line 16 is:

    name = Faker::Name.name
    

    Any ideas why I am getting this error? Thank you.

    • ptd
      ptd over 9 years
      Do you have the faker gem?
    • user1072337
      user1072337 over 9 years
      I have the faker gem under my gemfile in group :test do
    • ptd
      ptd over 9 years
      Were you running rake db:seed in the test environment? Assuming you are running it in development, you need to add it to your development group as well.
    • user1072337
      user1072337 over 9 years
      ok that worked; sorry for the waste of time.
    • jerhinesmith
      jerhinesmith over 9 years
      It's not a waste of time if you learned something. Might be worthwhile to add your own answer at the bottom saying something like rake db:seed runs in the development environment. If you're using Faker in your seeds, make sure it's in both the development and test groups.
  • BenKoshy
    BenKoshy about 6 years
    in the individual tests spec file or in the rails_helper.rb file?
  • Touré Holder
    Touré Holder about 5 years
    yup... :face_palm:
  • Ali Ammaar
    Ali Ammaar almost 2 years
    I had to use require 'faker' in rails console in development environment, thanks