質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

894閲覧

heroku run rails db:seed_fu が反映されません

Kakichi_01

総合スコア43

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2022/06/19 08:23

seed_fuを利用してCSVファイルを一覧表示しているのですが、ローカルではしっかり反映されています。
ただ、herokuで同様に以下のコマンドを打ち込んで、反映されません。
どのようにすれば、herokuでも、ローカルのように一覧表示されますでしょうか。

◆実施したherokuコマンド
・git push heroku main //デプロイはできています

・heroku run rails db:migrate // Running rails db:migrate on...と表示され、以下のように表示されます。
イメージ説明

・heroku run rails db:seed_fu //Running rails db:seed_fu on...xxx up, run.7916 (Free) で終わります(数字はいつも違います)

◆やってみたこと(heroku)
・heroku run rails db:seed // seed.rbの方は何も記載していないのでもちろん反応しません
・heroku run bundle exec rails db:seed_fu RAILS_ENV=production 

・heroku run rails db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1  //一度リセットしようと思い、”heroku run rails db:migrate:reset”と打ち込んだら、DISABLE~以降をつけてなさいとエラー(以下)が出たのでこれでリセットしました。何か問題あったでしょうか?

rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.4.8/lib/active_record/tasks/database_tasks.rb:63:in check_protected_environments!' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.4.8/lib/active_record/railties/databases.rake:15:in block (2 levels) in <main>'
/app/vendor/bundle/ruby/2.6.0/gems/railties-6.0.4.8/lib/rails/commands/rake/rake_command.rb:23:in block in perform' /app/vendor/bundle/ruby/2.6.0/gems/railties-6.0.4.8/lib/rails/commands/rake/rake_command.rb:20:in perform'
/app/vendor/bundle/ruby/2.6.0/gems/railties-6.0.4.8/lib/rails/command.rb:48:in invoke' /app/vendor/bundle/ruby/2.6.0/gems/railties-6.0.4.8/lib/rails/commands.rb:18:in <main>'
/app/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in require' /app/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in require'
/app/bin/rails:9:in `<main>'
Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

・上記下段に記載あるように、
$ heroku run rails db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1
$ heroku run rails db:check_protected_environments
を実行し、その後、
$ heroku run rails db:create
$ heroku run rails db:migrate
$ heroku run rails db:seed_fu
を実行しましたが、やはり反映されませんでした。

どなたか気になるところだけでもあればご教示いただけますと幸いです!

◆やってみたこと(seed_fu)

ruby

1csv = CSV.read('db/items.csv', encoding: 'UTF-16') 2csv.each do |row| 3Item.seed(:item_name, :description, :image_url) do |s| 4s.item_name = row[1] 5s.description = row[2] 6s.image_url = row[3] 7s.star = row[4] 8end 9end

↓herokuはid連番の必要がある?という記事も見つけたので、item_idカラムを作成、番号を振ってみましたが、変わりませんでした。ここが原因なのかどうかもわからず。。m(_ _)m
https://qiita.com/yunyun_engineer/items/f719c9f7e885d4cab1e1

ruby

1require 'csv' 2 3csv = CSV.read('db/items.csv', encoding: 'UTF-16') 4csv.each do |row| 5 item_id = row[0] 6 item_name = row[1] 7 description = row[2] 8 image_url = row[3] 9 star = row[4] 10 11 Item.seed(:item_id) do |s| 12 s.item_id = item_id 13 s.item_name = item_name 14 s.description = description 15 s.image_url = image_url 16 s.star = star 17 end 18end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

データ更新の際、db:seedする前にresetしなくてはならないのが面倒でseed_fuを利用しようと思いましたが、上記エラーが解決できなかったので、以下の方針で解決。

Seed.rbにて一意性制約を設けることで、編集のたびにdb:seedを行なっても重複登録されない運用ができました。
開発環境でもherokuでも問題ありませんでした。

ruby

1require 'csv' 2 3csv = CSV.read('db/fixtures/items.csv', encoding: 'UTF-16') 4csv.each do |row| 5 item_id = row[0] 6 item_name = row[1] 7 description = row[2] 8 image_url = row[3] 9 star = row[4] 10 11 Item.seed(:item_id) do |s| 12 s.item_id = item_id 13 s.item_name = item_name 14 s.description = description 15 s.image_url = image_url 16 s.star = star 17 end 18end

他メモ

・CSVファイルをVS-code上で編集すると文字化けすることがある
→文字コードを「Shift_JIS」もしくは「Unicode(UTF-16)」に変更して保存。
・rails db:seed_fuで"\xFF" on Shift_JISエラーが出たので、encoding: 'UTF-16'としたら解決。

・rails
$ rails db:migrate
$ rails db:seed

・heroku
$ heroku run rails db:migrate
$ heroku run rails db:seed

投稿2022/06/22 13:04

編集2022/06/22 13:07
Kakichi_01

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問