0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Herokuにデプロイ後にCSVで作成したデータをテーブルに登録したい Rails

Posted at

あらかじめデプロイする前に

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?