fluid_27’s blog

勉強した内容をアウトプットするためのブログ

HerokuでMySQLからPostgreSQLに変換する際に躓いたエラー

railsで開発していたアプリをherokuでデプロイすることにしました。

 

当初、アプリをherokuでデプロイする予定ではなかったので、DBはMySQLだったものを本番環境だけPostgreSQLに移行することにしました。(本当は悪手かもしれませんが、、)

その経緯をまとめたのが下記記事です。

 

fluid-27.hatenablog.com

 

今回はその際に躓いたエラーと解消までの道のりです。

 

herokuで

$ rails db:migrate

した際に

rails aborted! StandardError: An error has occurred, this and all later migrations canceled: PG::DatatypeMismatch: ERROR: column "business_time" cannot be cast automatically to type text HINT: You might need to specify "USING business_time::text". : ALTER TABLE "shops" ALTER COLUMN "business_time" TYPE text[]

というエラー発生。

 

アプリ開発段階でカラムの1つに「文字列の配列」をデータ型に選択したことがありました。

途中でそのカラムは削除し、通常の「文字列」に変更したのですが、

migrationファイルに

db/migrate/20210205024357_change_datetype_business_time_of_shops.rb 

 class ChangeDatetypeBusinessTimeOfShops < ActiveRecord::Migration[5.2]

  def change

   change_column :shops, :business_time, :text, array: true

  end

 end

というファイルが残ってしまっていた為に、postgresqlに変換する際エラーが発生しているようでした。(開発段階では後に上記カラムを削除するmigrationファイルを追加してますが、postgresqlでは上記migrationファイルを読み込んだ時点でエラーとなり、rollbackしてしまっているようでした)

 

色々、ググってみて、migrationファイルをdownした状態で削除→rails db:migrateする方法を取りました。

 

該当migrationファイルだけdownさせればいい話だと思うのですが、当時はいまいち事態を把握できておらず、ローカル環境で

$ rails db:migrate reset

してから該当ファイルを削除した後、githubに反映させるつもりでした。

が、下記エラーが

rails aborted!

ActiveRecord::NoEnvironmentInSchemaError:

Environment data not found in the schema. To resolve this issue, run:

bin/rails db:environment:set RAILS_ENV=development

 

上記のエラー文に従って下記実行

$ bin/rails db:environment:set RAILS_ENV=development

 

改めて

$ rails db:migrate reset

問題なく実行できたので、問題のあったmigrationファイルを削除しました。

その後、githubにプッシュしたものの、何故か反映されませんでした。

 

ので、github上で直接問題のあったファイルを削除し、改めてherokuコンソールでrails db:migrateすることで解決しました。