うろおぼエンジニアの備忘録

忘れてしまいそうなことを記録していきます。

【Rails】DBフィールド追加後にHerokuでページが表示されない時の解決法

データベースにname, phone_number, description というフィールドを以下のコードで追加したが

$ rails g migration AddExtraFieldsToUser name:string phone_number:string description:string

herokuにpushした後にDBに不具合があるからか、ページが表示されずに、something went wrongというエラーメッセージが出る。

f:id:uro-boe:20180617113054j:plain

そこで以下のコマンド

$ heroku run rake db:migrate

を実行すると、数行に渡るログが表示され

Running rake db:migrate on ⬢ app-name... up, run.4568 (Free)
   (3.0ms)  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
   (3.0ms)  SELECT GET_LOCK('7254395911760070465', 0)
   (2.8ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
Migrating to AddExtraFieldsToUser (20180616054916)
== 20180616054916 AddExtraFieldsToUser: migrating =============================
-- add_column(:users, :name, :string)
   (9.2ms)  ALTER TABLE `users` ADD `name` varchar(255)
   -> 0.0098s
-- add_column(:users, :phone_number, :string)
   (6.3ms)  ALTER TABLE `users` ADD `phone_number` varchar(255)
   -> 0.0066s
-- add_column(:users, :description, :string)
   (6.8ms)  ALTER TABLE `users` ADD `description` varchar(255)
   -> 0.0072s
== 20180616054916 AddExtraFieldsToUser: migrated (0.0240s) ====================

   (3.4ms)  BEGIN
  SQL (2.9ms)  INSERT INTO `schema_migrations` (`version`) VALUES ('20180616054916')
   (2.6ms)  COMMIT
  ActiveRecord::InternalMetadata Load (2.9ms)  SELECT  `ar_internal_metadata`.* FROM `ar_internal_metadata` WHERE `ar_internal_metadata`.`key` = 'environment' LIMIT 1
   (2.6ms)  BEGIN
   (2.9ms)  COMMIT
   (3.1ms)  SELECT RELEASE_LOCK('7254395911760070465')

どうやらTableにcolumnをname, phone_number, descriptionそれぞれ追加できたようなので、

$ git push heroku master
$ Everything up-to-date

でもう一度pushし、

$ heroku open

とした結果、今回はきちんとDBが更新され、正常にwebサイトが動作していることを確認できた。




ポイント

DB変更した後はHerokuでマイグレーションのコマンド

$ heroku run rake db:migrate

を忘れずに実行してから、herokuへのpushを行う。