#目次
1.前提条件、やりたかったこと
2.エラーメッセージ
3.原因・対策
4.まとめ
###1.前提条件、やりたかったこと
開発環境
Ruby 2.6.5 Rails 6.0
Heroku/MySQL/Visual Studio Code
railsでアプリ開発をしました。Herokuにデプロイしたところseedファイルの内容が反映されず表示されませんでした。(ローカル環境では表示されています)
修正前
seeds.rb
Category.create(name:'野菜')
Category.create(name:'果物')
Category.create(name:'きのこ類')
Product.create(name:'ねぎ', shelf_life:'7', frozen_life:'60', category_id:'1', info:'')
Product.create(name:'長ネギ', shelf_life:'7', frozen_life:'60', category_id:'1', info:'')
Product.create(name:'玉ねぎ', shelf_life:'60', frozen_life:'30', category_id:'1', info:'')
Product.create(name:'じゃがいも', shelf_life:'60', frozen_life:'30', category_id:'1', info:'常温の場合は3~4ヶ月')
Product.create(name:'さつまいも', shelf_life:'60', frozen_life:'60', category_id:'1', info:'')
#以下省略
###2.エラーメッセージ
以下はターミナルのログです。Categoryは読みに行っているのですが、何故かProductではなく再びCategoryを読みに行っているように見えます。
Running rails db:seed on ⬢ fridge-app-35190... up, run.7217 (Free)
D, [2021-04-24T02:21:50.167441 #4] DEBUG -- : (2.4ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
D, [2021-04-24T02:21:50.259743 #4] DEBUG -- : (16.5ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
D, [2021-04-24T02:21:50.329090 #4] DEBUG -- : (2.2ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
D, [2021-04-24T02:21:50.367828 #4] DEBUG -- : (4.8ms) BEGIN
D, [2021-04-24T02:21:50.370664 #4] DEBUG -- : Category Create (2.5ms) INSERT INTO `categories` (`name`, `created_at`, `updated_at`) VALUES ('野菜', '2021-04-24 02:21:50.361412', '2021-04-24 02:21:50.361412')
D, [2021-04-24T02:21:50.379870 #4] DEBUG -- : (8.6ms) COMMIT
D, [2021-04-24T02:21:50.383787 #4] DEBUG -- : (2.3ms) BEGIN
D, [2021-04-24T02:21:50.387830 #4] DEBUG -- : Category Create (3.8ms) INSERT INTO `categories` (`name`, `created_at`, `updated_at`) VALUES ('果物', '2021-04-24 02:21:50.380587', '2021-04-24 02:21:50.380587')
D, [2021-04-24T02:21:50.403017 #4] DEBUG -- : (14.0ms) COMMIT
D, [2021-04-24T02:21:50.410235 #4] DEBUG -- : (3.2ms) BEGIN
D, [2021-04-24T02:21:50.413133 #4] DEBUG -- : Category Create (2.6ms) INSERT INTO `categories` (`name`, `created_at`, `updated_at`) VALUES ('きのこ類', '2021-04-24 02:21:50.403760', '2021-04-24 02:21:50.403760')
D, [2021-04-24T02:21:50.424287 #4] DEBUG -- : (10.6ms) COMMIT
D, [2021-04-24T02:21:50.482544 #4] DEBUG -- : (2.4ms) BEGIN
D, [2021-04-24T02:21:50.486608 #4] DEBUG -- : Category Load (3.6ms) SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 1 LIMIT 1
D, [2021-04-24T02:21:51.409149 #4] DEBUG -- : (2.3ms) ROLLBACK
D, [2021-04-24T02:21:51.412205 #4] DEBUG -- : (1.9ms) BEGIN
D, [2021-04-24T02:21:51.414466 #4] DEBUG -- : Category Load (2.1ms) SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 1 LIMIT 1
D, [2021-04-24T02:21:51.417633 #4] DEBUG -- : (1.9ms) ROLLBACK
D, [2021-04-24T02:21:51.420801 #4] DEBUG -- : (1.9ms) BEGIN
#以下省略
###3.原因・対策
HerokuのDBを確認した所、Categoryのidが4.14.24となっていました。
idを1.2.3と連番で付与したところ解決しました。
修正後
seeds.rb
Category.create(id:'1', name:'野菜')
Category.create(id:'2', name:'果物')
Category.create(id:'3', name:'きのこ類')
Product.create(name:'ねぎ', shelf_life:'7', frozen_life:'60', category_id:'1', info:'')
Product.create(name:'長ネギ', shelf_life:'7', frozen_life:'60', category_id:'1', info:'')
Product.create(name:'玉ねぎ', shelf_life:'60', frozen_life:'30', category_id:'1', info:'')
Product.create(name:'じゃがいも', shelf_life:'60', frozen_life:'30', category_id:'1', info:'常温の場合は3~4ヶ月')
Product.create(name:'さつまいも', shelf_life:'60', frozen_life:'60', category_id:'1', info:'')
#以下省略
###4.まとめ
詳しくはわかりませんが、Herokuの仕様上idを連番で付与してあげないときちんと読み込みが実行されないようです。原因が特定できず解決までに時間を要しましたので、共有したいと思います。