LoginSignup
3
3

More than 3 years have passed since last update.

db:create で ActiveRecord::NoDatabaseError の原因が factory_bot_rails だった話

Last updated at Posted at 2020-02-15

ググっても引っかからなかったので取り急ぎメモ

結論

Gemfile
- gem 'factory_bot_rails'
+ gem 'factory_bot_rails', require: false

背景

bin/rails db:createbundle exec rake db:create 等で ActiveRecord::NoDatabaseError: Unknown database 'xxxxx' というエラーが発生した。いや、その DB を作れと言ってるんだが...?

スタックトレースを追うと factory_bot に関する怪しげな部分が見つかった。以下は GitHub Actions 上での例。

/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/trait.rb:12:in `instance_eval'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/trait.rb:12:in `initialize'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/definition_proxy.rb:173:in `new'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/definition_proxy.rb:173:in `trait'
/home/runner/work/xxxx/xxxx/spec/factories/articles.rb:70:in `block (2 levels) in <main>'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:18:in `instance_eval'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:18:in `factory'
/home/runner/work/xxxx/xxxx/spec/factories/articles.rb:2:in `block in <main>'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:49:in `instance_eval'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:49:in `run'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:7:in `define'

応急的に require するまで factory_bot_rails をロードしないようにして解決した。

Gemfile
- gem 'factory_bot_rails'
+ gem 'factory_bot_rails', require: false

あとは FactoryBot を使いたい場所で require すれば良い。

spec/support/factory_bot.rb
+ require 'factory_bot_rails'
+
  RSpec.configure do |config|
    config.include FactoryBot::Syntax::Methods
  end
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3