あらかじめデプロイする前に
db/seeds.rb
require "csv"
CSV.foreach("db/archive.csv", headers: true) do |row|
Archive.create(
id: row["id"],
archiveid: row["archiveid"],
archivetitle: row["archivetitle"],
archiveviews: row["archiveviews"],
archivepostdate: row["archivepostdate"],
archiveurl: row["archiveurl"],
archiveimg: row["archiveimg"],
created_at: row["created_at"],
updated_at: row["updated_at"],
)
end
を記述して、該当のディレクトリにCSVを格納しておきます。
これは要はHerokuにデプロイした後に、
heroku run rake db:seed
を実行して、インポートしようという算段です。
Herokuへのデプロイのやり方は省略します。
ただし、今回はデプロイ時にいくつかポイントがありました。
ローカル環境でもそうでしたが、今回絵文字を多用しているので、テーブルに登録するデータのエンコードはutf8mb4にしなければなりません。
ということで、
heroku run rails db:migrate
する前に、設定を変更しましょう。
heroku config:set DATABASE_URL="mysql2://<username>:<password>@<host>/<database>?reconnect=true&encoding=utf8mb4"
これでMySQLのエンコードをutf8mb4にすることになります。
そして
db/migrate/20210************_create_***.rb
class CreateMusics < ActiveRecord::Migration[6.0]
def change
create_table :musics, options: 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4' do |t|
#OPTION以降を追記
コミット、プッシュして、Herokuにもプッシュ
この状態で
heroku run rails db:migrate
でマイグレーション。
更に
heroku run rake db:seed
これで登録ができるはず・・・・
トラブルシューティング
実際はこれでできなかったから困りました。
そこで対応したこととしては
①Herokuへ再度プッシュ
②DBのリセット
今回は②が有効でした。
heroku run rails db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1