8
6

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.

本番環境でデータベースに情報を入力する方法。(seed.rb, SQL)

Posted at

はじめに

ローカル環境ではMYSQLに直接データベースの情報を入力していたのに
本番環境ではどのように入れたら良いかわからなーーーい!!
という方に必見です!!

※「Ruby on rails」を用いて作業しておりますので
そのことに関する情報のアウトプット記事となっております!!

1.モデルの作成

使用するアプリは
①moviesテーブル
②genresテーブル
③movie_genresテーブル(中間テーブル)
のデータを持っているとします。

それぞれのモデルとマイグレーションファイルを作成します。

ターミナル
rails g model movie title:string content:text --timestamps=false
# movieのモデルとマイグレーションファイルが生成される。
rails g model genre name:string --timestamps=false
# genreのモデルとマイグレーションファイルが生成される。
rails g model movie_genre movie_id:integer genre_id:integer --timestamps=false
# movie_genreのモデルとマイグレーションファイルが生成される。

それぞれのモデルの関係性は下記の通りです。

movie.rb
class Movie < ApplicationRecord
  has_many :genres, through: :movie_genres
  has_many :movie_genres
end
genre.rb
class Genre < ApplicationRecord
  has_many :movies, through: :movie_genres
  has_many :movie_genres
end
movie_genre.rb
class MovieGenre < ApplicationRecord
  belongs_to :movie, optional: true
  belongs_to :genre, optional: true
end

※Rails5からデフォルトで外部キーのnilが許可されなくなったので、 nilを許可する場合は以下のようにbelongs_to へoptional: trueを設定する必要があります。

2.テーブルの作成

ターミナル
rails db:migrate  # マイグレーションを実行し、テーブルを作成。

テーブルができるので
ここからが本番環境でも適応されるデータベースへの書き込み方になります!!

3.seed.rbの記述をし本番環境でテーブル情報を反映

seed.rbに下記のように入力します。

seed.rb
Movie.create!(
  title: 'トイストーリー',
  content: 'おもちゃが動き出すよん',
)
#映画のtitleとcontentを入力
#書き方は他にもいろいろあるみたいですけど私はこの書き方にしました。

Genre.create!(
  name: 'アニメーション',
)
Genre.create!(
  name: 'アドベンチャー',
)
#ジャンルのnameを入力

この状態で

ターミナル
rails db:seed

を入力するとローカル環境のデータベースで反映されています。
これらのデータを入力し終えたらリモートにpushしましょう。

では続けて本番環境で

ターミナル
[ec2-user@******* ~]$ cd /var/www/アプリケーション名/
[ec2-user@******* アプリケーション名]$ cd current/
[ec2-user@******* current]$ rake db:seed RAILS_ENV=production

を入力すると本番環境でも
①moviesテーブル
②genresテーブル
が反映されることができました。

では続いて
③movie_genresテーブル(中間テーブル)を本番環境で反映させたいと思います。

1.SQLに直接記述し本番環境で中間テーブル情報を反映

seed.rbに中間テーブルデータを記述する方法もあるとは思うのですが、
自分では調べてもできなかったのでSQLに直接書く方法を記述します。

本番環境で下記を記述

ターミナル
[ec2-user@******* current]$ mysql -u root -p
# Enter password: とパスワードを入力するように表示されるので、MySQLのrootパスワードを入力して、Enterしてください。
mysql> SHOW DATABASES;
# SQL文を実行すると今まで作ってきたデータベースが一覧で表示されます。
mysql> USE 対象となるデータベースを入力;
# USEで指定したデータベース内を操作できるようにします。
mysql> INSERT INTO movie_genres (movie_id, genre_id) VALUES (1, 1);
mysql> INSERT INTO movie_genres (movie_id, genre_id) VALUES (1, 2);
# これらを入力することで中間テーブルに情報を反映させることができます。

これで③movie_genresテーブル(中間テーブル)の情報も本番環境で反映させることができました。

他にもやり方はあると思いますが私はこのやり方でテーブル、
中間テーブルの情報を本番環境でも反映させることができました。

おわりに

説明した方法以外にもやり方はあると思いますので他の方法が見つかれば
情報共有してもらえればありがたいです!!!

最後まで見てもらいありがとうございました!!

8
6
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
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?