Uninitialized constant FAKER when "seeding" db [duplicate] - ruby-on-rails

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: "example#railstutorial.org",
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.

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

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

I added gem 'faker' in the Gemfile. Then I run bundle install to get the gem.

As per official faker documentation, it said:
Note: if you are getting a uninitialized constant Faker::[some_class]
error, your version of the gem is behind the one documented here. To
make sure that your gem is the one documented here, change the line in
your Gemfile to:
gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main'
But the problem still persist with mine app, since I have done this and I am getting the error again, but only when try to run the migrations to heroku:
heroku run rails db:migrate db:seed
When I run the command locally I do not have the problem and migrations and seeds are executed.

Related

Rails::TestUnit::Runner.run NameError: uninitialized constant

On Rails 6 (6.1.4.1) we had a RakeFile that would run a subset of tests. For example:
# lib/tasks/carrier.rake
namespace :test do
task carriers: "test:prepare" do
$: << "test"
test_files = FileList["test/models/carrier_test.rb",
"test/controllers/admin/carriers/**/*_test.rb",
"test/system/admin/carriers/**/*_test.rb"]
Rails::TestUnit::Runner.run(test_files)
end
end
This would execute just fine when called:
rails test:carriers
However, somewhere along the way, something changed and we began seeing errors when trying to run our RakeFile test tasks. (I haven't tracked down exactly what changed and when it changed -- perhaps it was part of the Rails 7 release.) Here's the error we began seeing:
rails aborted!
NameError: uninitialized constant Shoulda
Shoulda::Matchers.configure do |config|
^^^^^^^
/path/test/test_helper.rb:15:in `<main>'
/path/test/models/carrier_test.rb:1:in `<main>'
/path/lib/tasks/carriers.rake:11:in `block (2 levels) in <main>'
Tasks: TOP => test:carriers
(See full trace by running task with --trace)
The error appeared with no changes to our tests or environment configuration. (Running a full rake worked just fine.)
When reviewing the source code for Rails::TestUnit::Runner, I came across rake_run. Simply replacing Rails::TestUnit::Runner.run with Rails::TestUnit::Runner.rake_run addressed the issue (no other changes required):
# lib/tasks/carrier.rake
namespace :test do
task carriers: "test:prepare" do
$: << "test"
test_files = FileList["test/models/carrier_test.rb",
"test/controllers/admin/carriers/**/*_test.rb",
"test/system/admin/carriers/**/*_test.rb"]
Rails::TestUnit::Runner.rake_run(test_files)
end
end

I18n::MissingTranslationData: translation missing: en.faker error when seeding db

I want to seed the database with Faker, the problem is that I am getting an error when I do a:
rake db:reset
I get this message:
rake aborted!
I18n::MissingTranslationData: translation missing: en.faker.name.name
/Library/Ruby/Gems/2.0.0/gems/i18n-0.7.0/lib/i18n.rb:311:in `handle_exception'
/Library/Ruby/Gems/2.0.0/gems/i18n-0.7.0/lib/i18n.rb:161:in `translate'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:128:in `rescue in translate'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:120:in `translate'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:86:in `fetch'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:99:in `parse'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker/name.rb:8:in `name'
/Users/hbendev/code/wikitec/db/seeds.rb:6:in `block in <top (required)>'
/Users/hbendev/code/wikitec/db/seeds.rb:4:in `times'
/Users/hbendev/code/wikitec/db/seeds.rb:4:in `<top (required)>'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/Library/Ruby/Gems/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:547:in `load_seed'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.0/lib/active_record/tasks/database_tasks.rb:250:in `load_seed'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:180:in `block (2 levels) in <top (required)>'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:139:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:setup => db:seed
I don't know why is that error appearing, since I haven't got any problems with Faker before, I just wanted to reset the db to update the seeds.
I google it but I can't find anything related that solves the problem.
I tried to add:
I18n.reload!
After require 'faker' in my seeds.rb file, but no luck.
Looks like the problem is with Faker itself, because the database is being created properly, when I do a rake db:drop db:create db:migrate it works, until there, but when I try to seed the database with Faker with rake db:seed or rake db:reset, I get the error.
What can I do? Thanks in advance.
UPDATE - I included seeds.rb and en.yml files
seeds.rb:
require 'faker'
# Create Users
5.times do
user = User.new(
name: Faker::Name.name,
email: Faker::Internet.email,
password: Faker::Lorem.characters(10)
)
user.skip_confirmation!
user.save!
end
users = User.all
# Create Wikis
25.times do
Wiki.create!(
title: Faker::Lorem.sentence,
body: Faker::Lorem.paragraph,
:private => false,
user: users.sample
)
end
# Create Admin account
admin = User.new(
name: 'Admin User',
email: 'admin#example.com',
password: 'helloworld',
role: 'admin'
)
admin.skip_confirmation!
admin.save!
# Create Premium account
premium = User.new(
name: 'Premium User',
email: 'premium#example.com',
password: 'helloworld',
role: 'premium'
)
premium.skip_confirmation!
premium.save!
# Create Standard account
standard = User.new(
name: 'Standard User',
email: 'standard#example.com',
password: 'helloworld',
role: 'standard'
)
standard.skip_confirmation!
standard.save!
puts "Seed finished"
puts "#{Wiki.count} wikis created"
puts "#{User.count} users created"
en.yml:
en:
hello: "Hello world"
In my case, the I18n available_locales config did not include en:
config.i18n.available_locales = %i[de de_en]
I reverted it back to
config.i18n.available_locales = %i[de en]
and it worked.
Check the I18n Faker configuration info here:
https://github.com/stympy/faker#customization
Looks like you should enforce the I18n Faker locale in case you are using a non standard locale in your app.
Just set Faker::Config.locale to the locale you want, and Faker will
take care of the rest.
This worked for me...
In your Gemfile add :require => false
group :development, :test do
#gem 'faker', '~> 1.4.3'
gem 'faker', :require => false
end
Add require "faker" manually...
I had the same problem.
it is necessary to move faker to Gemfile from
group: development: test do
gem 'faker'
end
for me it solved a problem
good luck

NameError: uninitialized constant Faker

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: "example#railstutorial.org",
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.
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
I faced the same issue while writing rspec and adding require 'faker' in spec file solved it.
I added gem 'faker' in the Gemfile. Then I run bundle install to get the gem.
As per official faker documentation, it said:
Note: if you are getting a uninitialized constant Faker::[some_class]
error, your version of the gem is behind the one documented here. To
make sure that your gem is the one documented here, change the line in
your Gemfile to:
gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main'
But the problem still persist with mine app, since I have done this and I am getting the error again, but only when try to run the migrations to heroku:
heroku run rails db:migrate db:seed
When I run the command locally I do not have the problem and migrations and seeds are executed.

Rails sunspot error on sunspot:solr:start

I'm actually trying to install and use the Sunspot gem for Rails (https://github.com/sunspot/sunspot). So far here is what I did. I added the dependencies in my Gemfile :
gem 'sunspot_rails'
gem 'sunspot_solr'
Then I did run bundle and create the configuration file using rails generate sunspot_rails:install. So far so good.
But then, when I tried to run bundle exec rake sunspot:solr:start, I'm facing the following error :
rake aborted!
Don't know how to build task 'sunspot:solr:start'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/task_manager.rb:49:in `[]'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:148:in `invoke_task'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:106:in `each'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:106:in `block in top_level'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:115:in `run_with_threads'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:100:in `top_level'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:78:in `block in run'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:165:in `standard_exception_handling'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/lib/rake/application.rb:75:in `run'
/Users/project/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rake-10.1.0/bin/rake:33:in `<top (required)>'
/Users/project/.rbenv/versions/2.0.0-p247/bin/rake:23:in `load'
/Users/project/.rbenv/versions/2.0.0-p247/bin/rake:23:in `<main>'
I'm actually using Rails 4 and Ruby 2.0.0. Did anyone already face the same issue or know a way to fix that?
Thanks a lot for the help
I had the same error that I was able to solve by adding the following file.
Source of Rakefile
Duplicate Question
lib/tasks/solr.rake
namespace :sunspot do
namespace :solr do
desc 'Start the Solr instance'
task :start => :environment do
case RUBY_PLATFORM
when /w(in)?32$/, /java$/
abort("This command is not supported on #{RUBY_PLATFORM}. " +
"Use rake sunspot:solr:run to run Solr in the foreground.")
end
if defined?(Sunspot::Rails::Server)
Sunspot::Rails::Server.new.start
else
Sunspot::Solr::Server.new.start
end
puts "Successfully started Solr ..."
end
desc 'Run the Solr instance in the foreground'
task :run => :environment do
if defined?(Sunspot::Rails::Server)
Sunspot::Rails::Server.new.run
else
Sunspot::Solr::Server.new.run
end
end
desc 'Stop the Solr instance'
task :stop => :environment do
case RUBY_PLATFORM
when /w(in)?32$/, /java$/
abort("This command is not supported on #{RUBY_PLATFORM}. " +
"Use rake sunspot:solr:run to run Solr in the foreground.")
end
if defined?(Sunspot::Rails::Server)
Sunspot::Rails::Server.new.stop
else
Sunspot::Solr::Server.new.stop
end
puts "Successfully stopped Solr ..."
end
# for backwards compatibility
task :reindex => :"sunspot:reindex"
end
end
You might want to try updating your version of the sunspot_solr gem, in case Rubygems is giving you an older version of sunspot_solr by mistake.
Try adding this to your gemfile instead of gem 'sunspot_solr' and running the bundle install + bundle exec rake sunspot:solr:start:
gem 'sunspot_solr', '~> 2.0.0', group: :development

RSpec failure: could not find table after migration...?

I have a naked rails 3 app with one model, generated using rails g model User.
I've added a factory (using factory_girl_rails):
Factory.define :user do |f|
f.email "test#test.com"
f.password "blah"
f.password_confirmation "blah"
f.display_name "neezer"
end
Then I've added one test:
require 'spec_helper'
describe User do
subject { Factory :user }
it "can be created from a factory" do
subject.should_not be_nil
subject.should be_kind_of User
end
end
Then I migrate my database using rake db:migrate.
Then I run the test using rspec spec, and the test fails with the following:
Failures:
1) User can be created from a factory
Failure/Error: subject { Factory :user }
ActiveRecord::StatementInvalid:
Could not find table 'users'
# ./spec/models/user_spec.rb:5:in `block (2 levels) in <top (required)>'
# ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>'
I'm confused, because I did just migrate my database, and my schema.db file reflects that there is a users table present, so what gives?
I know this is a beginner question, but banging my head against a wall isn't working...
factory_girl (1.3.3)
factory_girl_rails (1.0.1)
rails (3.0.5)
rspec-rails (2.5.0)
sqlite3 (1.3.3)
Try to execute
rake db:test:prepare
This should fix your tests db.
The point here is that rspec command doesn't execute migrations on your test database. and rake db:migrate only runs migrations in your current environment, probably development. Others environment like production and test ends without having those changes.
You can run
rake spec
That will prepare your testing db (drop and create using schema.rb) and run all tests.
As the other answer suggested, this:
rake db:test:prepare
Will also setup your testing db, but you have to run the rspec command after that, so, personally I prefer the first option.
try this out:
For rails version > 4.1+ this solution will work as the current scenario.
but in Rails 4.1+, rake db:test:prepare is deprecated.
try using
rake db:migrate RAILS_ENV=test (it will work for all version of rails)

Resources