Railsでアプリを作ろうとしており、改めて環境構築から実施したので、データベースの環境構築設定まわりをまとめようと思います。
<スポンサードリンク>
接続情報の設定
dbの接続情報は、config/database.ymlに記述します。
下記に、database.ymlのサンプルを載せます。
default: &default adapter: postgresql encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 development: <<: *default database: <%= ENV['DEV_DATABASE_NAME'] %> username: <%= ENV['DEV_DATABASE_USERNAME'] %> password: <%= ENV['DEV_DATABASE_PASSWORD'] %> production: <<: *default database: <%= ENV['PROD_DATABASE_NAME'] %> username: <%= ENV['PROD_DATABASE_USERNAME'] %> password: <%= ENV['PROD_DATABASE_PASSWORD'] %>
サンプルのように、database.ymlでは、環境ごとに接続するデータベースを分けて記述することができ、共通の設定に関しては、defaultの情報を引き継ぐことができます。
蛇足ですが、database.ymlは、リポジトリに登録すると思うので、接続情報等は環境変数から取得することをおすすめします。
Railsの環境変数管理gem、dotenvの使い方徹底解説
database.ymlに、記述できる項目は下記の通りです。
項目名 | 説明 |
adapter | データベースの種類 |
pool | コネクションの上限数 |
host | ホスト名 |
encoding | 文字コード |
reconnect | 再接続するか |
database | データベース名 |
username | ユーザー名 |
password | パスワード |
データベースの作成
databese.yamlを作成したら、データベースを作りましょう。
% rake db:create
環境を指定したければ、RAILS_ENV=developmentなどをつけてください。
<スポンサードリンク>
migrationファイルの作成
次にrailsのコマンドで、migrationファイルを作成します。
% rails generate(g) migration クラス名
modelも一緒に作りたい場合は、下記のようなコマンドです。
rails generate(g) model モデル名
今回は試しにuserテーブルを作成してみます。
railsのコマンドを打つと、下記のように、db/migrateの下にmigrationファイルが作成されます。
% rails g model User name:string balance:integer Running via Spring preloader in process 1481 invoke active_record create db/migrate/20180724114654_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml
作成されたmigrationファイルはこんな感じです。
% cat db/migrate/20180724114654_create_users.rb class CreateUsers < ActiveRecord::Migration[5.1] def change create_table :users do |t| t.string :name t.integer :balance t.timestamps end end end
このままでは、当然データベースには反映されていないので、migrationコマンドでDBに反映させます。
成功すると下記のようなログがでます。
% rake db:migrate == 20180724114654 CreateUsers: migrating ====================================== -- create_table(:users) -> 0.0221s == 20180724114654 CreateUsers: migrated (0.0222s) =============================
これで、テーブルの作成が完了です。
最後に動作確認をしてみます。
接続確認
userを作成して、User.firstで参照して確認しようと思います。
2.4.0 :001 > User.create(name: 'hogehoge', balance: 100) (0.2ms) BEGIN SQL (2.1ms) INSERT INTO "users" ("name", "balance", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["name", "hogehoge"], ["balance", 100], ["created_at", "2018-07-24 11:55:24.811873"], ["updated_at", "2018-07-24 11:55:24.811873"]] (0.5ms) COMMIT => #<User id: 1, name: "hogehoge", balance: 100, created_at: "2018-07-24 11:55:24", updated_at: "2018-07-24 11:55:24"> 2.4.0 :002 > User.first User Load (0.6ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]] => #<User id: 1, name: "hogehoge", balance: 100, created_at: "2018-07-24 11:55:24", updated_at: "2018-07-24 11:55:24">
登録も参照もちゃんとできました。
ちなみにですが、Railsでは、id、created_at、updated_atというカラムを自動生成してくれます。便利ですね。
以上で、データベース設定が完了です。
関連
Railsの環境変数管理gem、dotenvの使い方徹底解説
Ruby on Rails 「config」gemで環境ごとに異なる定数をシンプルに管理する
Rails 初めてのAPI作成 1時間でとりあえず動くまで!!