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.

Windows10 + heroku + github + Ruby on Rails 事始め③ DB編(2020/02版)

Last updated at Posted at 2020-02-04

概要

  • 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ディレクトリ以下に、ユーザーテーブル作成用コードが追加されています。

image.png

初期データ投入

定義

初期データは、<ワークディレクトリ>/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

image.png

github にあげる

$ git add -A
$ git commit -m "ユーザー一覧画面追加"
$ git push origin work-create-page

image.png

登録されました。

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に初期データが入って、画面が表示できました。

image.png

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」を選びます。

image.png

アカウント内のデータストア一覧が表示されます。
どのアプリケーションでどのDBを使用しているかは、上記の Add-on: postgresql-flat-20934 で確認できます。

image.png

DBの詳細が確認できます。

image.png

実際に入っているデータを確認したい場合、「Dataclips」を選びます。
最初は有効になっていないので、「create」します。

image.png

以下を入力すると、「Save&Run」のボタンが有効化されます。

  • クリップ名
  • 公開範囲
  • クエリ

image.png

「Save&Run」のボタンをクリックすると、検索結果が表示されます。

image.png

CLIから確認する

PostgreSQLのインストール

CLI で SQL系のコマンドを動かすため、PostgreSQLを導入します。

image.png

上記の PG Version: 11.6 を確認し、それと同じバージョンをDLします。

(以降、未作成です。他のネタを片付けたら取りかかります)

次は、githubの操作をやってみます。
Windows10 + heroku + github + Ruby on Rails 事始め④ github編(2020/02版)

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?