Railsアプリをデプロイ時に、以下のようなエラーが出ました。
前提
Ruby 2.4.5
Rails 4.2.8
mysql(開発環境)
postgresql(本番環境)
以下実行
command
1git push heroku master
以下実行後にエラー
command
1heroku run rails db:migrate
エラー
terminal
1(省略) 2== 20190123183555 AddColumnToItem: migrated (0.0029s) ========================= 3 4 SQL (1.1ms) INSERT INTO "schema_migrations" ("version") VALUES ($1) [["version", "20190123183555"]] 5 (1.8ms) COMMIT 6Migrating to ChangeDatatypeCheckOfItems (20190203015612) 7 (1.4ms) BEGIN 8== 20190203015612 ChangeDatatypeCheckOfItems: migrating ======================= 9-- change_column(:items, :check, :boolean) 10 (1.8ms) ALTER TABLE "items" ALTER COLUMN "check" TYPE boolean 11 (1.4ms) ROLLBACK 12rake aborted! 13StandardError: An error has occurred, this and all later migrations canceled: 14 15PG::DatatypeMismatch: ERROR: column "check" cannot be cast automatically to type boolean 16HINT: You might need to specify "USING "check"::boolean". 17: ALTER TABLE "items" ALTER COLUMN "check" TYPE boolean
過去のマイグレーションファイルの中で、boolean型がmysqlとpostgreの間でうまく変換できていないものと思われます。
エラー文の、You might need to specify "USING "check"::boolean"
から、migrationファイルを作成し、カラムの型変更をしてみましたがどれもうまくいきません。
Ruby
1#うまくいかない 2class ChangeColumnToItem < ActiveRecord::Migration 3 def change 4 change_column :items, :check, "USING check::boolean" 5 end 6end 7#これもうまくいかない 8class ChangeColumnToItem < ActiveRecord::Migration 9 def change 10 change_column :items, :check, "USING "check"::boolean" 11 end 12end 13 14#これもうまくいかない 15class ChangeColumnToItem < ActiveRecord::Migration 16 def change 17 change_column :items, :check, 'boolean USING CAST(check AS boolean)' 18 end 19end
試してみたこと
USINGというのを使って指定する方法が検索してもほとんど出てこなく困っています。
また、postgreの文法だとうまくいかずSQLの文法で書けというエラーがでてしまいます。
また、開発環境と本番環境で違うデータベースを使うこと自体よくないと思うのですが、herokuにクレジットカード登録できないというエラーから、postgreでやるしか選択肢がない状態です。
参考記事
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/31 05:58