名称错误:未初始化常量Faker

26

我正在尝试在Rails 4中运行一个简单的bundle exec rake db:seed命令以填充我的数据库。但是,在运行时,我得到以下输出:

********-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)

这是我的seeds.rb文件:

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

第16行是:

name = Faker::Name.name

有什么想法,为什么我会收到这个错误?谢谢。


你有faker gem吗? - ptd
我在我的Gemfile中的:test组下有faker gem。 - user1072337
4
你是否在测试环境中运行了 rake db:seed - ptd
好的,那个有效了;很抱歉浪费了您的时间。 - user1072337
1
如果你学到了东西,那么这不是浪费时间。在底部添加自己的答案可能是值得的,比如说 rake db:seeddevelopment 环境中运行。如果你在种子文件中使用 Faker,请确保它同时在 developmenttest 组中。 - jerhinesmith
4个回答

52

刚遇到类似的问题 - 我正在运行

rails g model model_name

同时出现错误:

uninitialized constant Faker (NameError)

问题的原因是我将gem添加到了test组中。

将其放置到developmenttest组中解决了问题:

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

1
哎呀... :face_palm: - Touré Holder

8

当我编写rspec并在spec文件中添加require 'faker'时,我遇到了相同的问题,但通过这样做解决了问题。


2
在单独的测试规范文件中还是在rails_helper.rb文件中? - BenKoshy
我在开发环境的Rails控制台中不得不使用require 'faker',谢谢。 - Ali Ammaar

0
根据官方的faker文档,它说:

注意:如果你遇到了未初始化常量Faker::[some_class]的错误,那么你的gem版本落后于这里记录的版本。为了确保你的gem是这里记录的版本,请在你的Gemfile中更改以下行:

gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main'

但是我的应用程序仍然存在问题,尽管我已经这样做了,但当我尝试将迁移运行到Heroku时,仍然会出现错误。

heroku run rails db:migrate db:seed

当我在本地运行命令时,我没有问题,并且迁移和种子数据被执行。

0

我在Gemfile中添加了gem 'faker'。然后我运行bundle install来获取这个gem。


1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接