概要
- RoRでDBを扱う
- ローカル開発環境のDBを参照する
- github にあげる
- heroku にデプロイする
- heroku環境のDBを参照する
- Webから確認する
- CLIから確認する(未作成)
モデル(テーブル)の作成
rails は、以下の形式で、DBのテーブルとカラムの定義ができます。
rails generate model モデル名 カラム名:データ型 カラム名:データ型 ...
以下のような形で、ユーザー情報を保持するテーブルを作ってみましょう。
- ユーザー情報
- 名前: string型
- 性別: integer型
- 誕生日: date型
<ワークディレクトリ>/ror-sample (work-create-page)
$ rails generate model user name:string sex:integer birthday:date
invoke active_record
create db/migrate/20200203060442_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
DBディレクトリ以下に、ユーザーテーブル作成用コードが追加されています。
初期データ投入
定義
初期データは、<ワークディレクトリ>/db/seeds.rb
で定義できます。
日本語を扱う場合、rbファイルに # coding: utf-8
を先頭に記載しておいて下さい。
# coding: utf-8
user.create(:name => "山田 太郎", :sex => 1, :birthday => "2011-11-14")
user.create(:name => "佐藤 花子", :sex => 2, :birthday => "2012-02-08")
user.create(:name => "田中 葵", :sex => 3, :birthday => "2013-10-25")
投入
DB定義を変更したので、まず作成し直します。
$ rails db:migrate
== 20200203060442 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0412s
== 20200203060442 CreateUsers: migrated (0.0413s) =============================
DB初期データを投入します。
$ rake db:seed
確認
rails dbconsole
でDBの中身が確認できます。
#何故かprefixが出てこなくて、動いてないのかとしばし右往左往しました…なんでだろ
$ rails dbconsole
.table
ar_internal_metadata schema_migrations
blogs users
スキーマの確認
.schema users
CREATE TABLE IF NOT EXISTS "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "sex" integer, "birthday" date, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
データ確認
select * from users;
1|山田 太郎|1|2011-11-14|2020-02-03 06:25:06.659376|2020-02-03 06:25:06.659376
2|佐藤 花子|2|2012-02-08|2020-02-03 06:25:06.827852|2020-02-03 06:25:06.827852
3|田中 葵|3|2013-10-25|2020-02-03 06:25:06.969406|2020-02-03 06:25:06.969406
dbconsoleを抜けるときは、 Ctrl + C を押した後、exit
+ Enter で終われます。
画面表示
データが投入できたので、これを画面に表示します。
画面作成
②の時と同様に、コマンドで画面を作成します。
<ワークディレクトリ> (work-create-page)
$ rails generate controller user list
create app/controllers/user_controller.rb
route get 'user/list'
invoke erb
create app/views/user
create app/views/user/list.html.erb
invoke test_unit
create test/controllers/user_controller_test.rb
invoke helper
create app/helpers/user_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/user.coffee
invoke scss
create app/assets/stylesheets/user.scss
controller
controllerで、ユーザー情報をすべて取得する処理を記入します。
app\controllers\user_controller.rb
class UserController < ApplicationController
def list
@users = User.all
end
end
view
view で、取得したユーザー情報をループで回して表示します。
<h1>ユーザー一覧</h1>
<% @users.each do |user| %>
<dl>
<dt><%= user.name %></dt>
<dd>
<ul>
<li>性別: <%= user.sex %></li>
<li>誕生日: <%= user.birthday %></li>
</ul>
</dd>
</dl>
<% end %>
サーバー起動
<ワークディレクトリ>\ror-sample>rails server
=> Booting Puma
=> Rails 5.2.4.1 application starting in development
=> Run `rails server -h` for more startup options
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Version 3.12.2 (ruby 2.6.5-p114), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
無事一覧が表示されました。
http://localhost:3000/user/list
github にあげる
$ git add -A
$ git commit -m "ユーザー一覧画面追加"
$ git push origin work-create-page
登録されました。
heroku にあげる
github → heroku のデプロイ
$ git push heroku work-create-page:master
Counting objects: 30, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (27/27), done.
Writing objects: 100% (30/30), 3.20 KiB | 272.00 KiB/s, done.
Total 30 (delta 14), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
DB作成
$ heroku run rails db:migrate
Running rails db:migrate on miu200521358-ror-sample... starting, run.1980 (Free)
Running rails db:migrate on miu200521358-ror-sample... connecting, run.1980 (Free)
Running rails db:migrate on miu200521358-ror-sample... up, run.1980 (Free)
D, [2020-02-03T08:15:34.856172 #4] DEBUG -- : (0.8ms) SELECT pg_try_advisory_lock(217714722442632450)
D, [2020-02-03T08:15:34.870266 #4] DEBUG -- : (1.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
I, [2020-02-03T08:15:34.871436 #4] INFO -- : Migrating to CreateBlogs (20200201042410)
D, [2020-02-03T08:15:34.874291 #4] DEBUG -- : (0.8ms) BEGIN
== 20200201042410 CreateBlogs: migrating ======================================
-- create_table(:blogs)
D, [2020-02-03T08:15:35.517859 #4] DEBUG -- : (642.9ms) CREATE TABLE "blogs" ("id" bigserial primary key, "title" character varying, "body" text, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
-> 0.6435s
== 20200201042410 CreateBlogs: migrated (0.6436s) =============================
D, [2020-02-03T08:15:35.523361 #4] DEBUG -- : ActiveRecord::SchemaMigration Create (1.3ms) INSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version" [["version", "20200201042410"]]
D, [2020-02-03T08:15:35.525795 #4] DEBUG -- : (2.1ms) COMMIT
I, [2020-02-03T08:15:35.525891 #4] INFO -- : Migrating to CreateUsers (20200203060442)
D, [2020-02-03T08:15:35.527539 #4] DEBUG -- : (1.0ms) BEGIN
== 20200203060442 CreateUsers: migrating ======================================
-- create_table(:users)
D, [2020-02-03T08:15:35.596087 #4] DEBUG -- : (68.0ms) CREATE TABLE "users" ("id" bigserial primary key, "name" character varying, "sex" integer, "birthday" date, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
-> 0.0685s
== 20200203060442 CreateUsers: migrated (0.0686s) =============================
D, [2020-02-03T08:15:35.597767 #4] DEBUG -- : ActiveRecord::SchemaMigration Create (0.9ms) INSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version" [["version", "20200203060442"]]
D, [2020-02-03T08:15:35.600562 #4] DEBUG -- : (2.5ms) COMMIT
D, [2020-02-03T08:15:35.607717 #4] DEBUG -- : ActiveRecord::InternalMetadata Load (0.9ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2 [["key", "environment"], ["LIMIT", 1]]
D, [2020-02-03T08:15:35.614861 #4] DEBUG -- : (0.8ms) BEGIN
D, [2020-02-03T08:15:35.616197 #4] DEBUG -- : (0.7ms) COMMIT
D, [2020-02-03T08:15:35.617257 #4] DEBUG -- : (0.9ms) SELECT pg_advisory_unlock(217714722442632450)
初期データ投入
$ heroku run rake db:seed
Running rake db:seed on miu200521358-ror-sample... starting, run.5401 (Free)
Running rake db:seed on miu200521358-ror-sample... connecting, run.5401 (Free)
Running rake db:seed on miu200521358-ror-sample... up, run.5401 (Free)
D, [2020-02-03T08:17:29.326773 #4] DEBUG -- : (8.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
D, [2020-02-03T08:17:29.365212 #4] DEBUG -- : (0.9ms) BEGIN
D, [2020-02-03T08:17:29.369784 #4] DEBUG -- : User Create (3.2ms) INSERT INTO "users" ("name", "sex", "birthday", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "山田 太郎"], ["sex", 1], ["birthday", "2011-11-14"], ["created_at", "2020-02-03 08:17:29.365530"], ["updated_at", "2020-02-03 08:17:29.365530"]]
D, [2020-02-03T08:17:29.371916 #4] DEBUG -- : (1.7ms) COMMIT
D, [2020-02-03T08:17:29.373040 #4] DEBUG -- : (0.8ms) BEGIN
D, [2020-02-03T08:17:29.376065 #4] DEBUG -- : User Create (0.9ms) INSERT INTO "users" ("name", "sex", "birthday", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "佐藤 花子"], ["sex", 2], ["birthday", "2012-02-08"], ["created_at", "2020-02-03 08:17:29.373184"], ["updated_at", "2020-02-03 08:17:29.373184"]]
D, [2020-02-03T08:17:29.377907 #4] DEBUG -- : (1.5ms) COMMIT
D, [2020-02-03T08:17:29.378943 #4] DEBUG -- : (0.7ms) BEGIN
D, [2020-02-03T08:17:29.381431 #4] DEBUG -- : User Create (1.7ms) INSERT INTO "users" ("name", "sex", "birthday", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "田中 葵"], ["sex", 3], ["birthday", "2013-10-25"], ["created_at", "2020-02-03 08:17:29.379172"], ["updated_at", "2020-02-03 08:17:29.379172"]]
D, [2020-02-03T08:17:29.384513 #4] DEBUG -- : (2.8ms) COMMIT
確認
heroku上のDBに初期データが入って、画面が表示できました。
heroku上のDBの中身を確認する
DB情報
$ heroku pg:info
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 1/20
PG Version: 11.6
Created: 2020-02-01 04:06 UTC
Data Size: 8.0 MB
Tables: 4
Rows: 6/10000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flat-20934
Webから確認する
Webの右上にあるメニューから「Data」を選びます。
アカウント内のデータストア一覧が表示されます。
どのアプリケーションでどのDBを使用しているかは、上記の Add-on: postgresql-flat-20934
で確認できます。
DBの詳細が確認できます。
実際に入っているデータを確認したい場合、「Dataclips」を選びます。
最初は有効になっていないので、「create」します。
以下を入力すると、「Save&Run」のボタンが有効化されます。
- クリップ名
- 公開範囲
- クエリ
「Save&Run」のボタンをクリックすると、検索結果が表示されます。
CLIから確認する
PostgreSQLのインストール
CLI で SQL系のコマンドを動かすため、PostgreSQLを導入します。
上記の PG Version: 11.6
を確認し、それと同じバージョンをDLします。
(以降、未作成です。他のネタを片付けたら取りかかります)
次は、githubの操作をやってみます。
Windows10 + heroku + github + Ruby on Rails 事始め④ github編(2020/02版)