#環境
Ruby 2.5.1
Rails 5.2.3
PostgreSQL 11.5
#ロールの作成
以下のコマンドでロール(ユーザー)を作成する。
psql -U postgres
postgres=# create role [rolename] with superuser createdb login password '[password]';
このコマンドでスーパーユーザー、DB作成可の属性を持ったロールが作成される。
[rolename]はロールの名前、[password]はDBへログインするためのパスワードを入力する。
属性の付与理由は以下の通り
- スーパーユーザー
- 外部キー参照を行うテーブルを作る場合、これが無いとテストで「参照整合性を無効にできない」というエラーが発生するため。
- (スーパーユーザーはほぼ全ての権限を持つため、上記エラーを回避するための権限のみを持たせるべきだが方法が不明。)
- DB作成可
- データベースを作成できる権限を付与するため。
- (スーパーユーザーを持っていれば、この属性が無くてもデータベースは作成可能となるが、将来スーパーユーザーを削除した場合を考えて付与する。)
#新規プロジェクトの作成
任意のフォルダに移動し以下のコマンドを実行する。
rails new [appname] -d postgresql
cd [appname]
[appname]はアプリ名称を入力する。
#設定の変更
config/database.ymlを以下のように変更する。(デフォルトのコメント部分は削除している。)
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# 以下3行を追加
username: [rolename] #作成したロールの名前
password: [password] #作成したロールのパスワード
host: localhost
development:
<<: *default
database: [appname]_development #[appname]はアプリ名称と同じ
test:
<<: *default
database: [appname]_test #[appname]はアプリ名称と同じ
production:
<<: *default
database: [appname]_production #[appname]はアプリ名称と同じ
username: [appname] #[appname]はアプリ名称と同じ
password: <%= ENV['TEST_APP_DATABASE_PASSWORD'] %>
#データベース作成
以下コマンドでデータベースを作成する。
rails db:create
config/database.ymlの設定により[appname]_developmentと[appname]_testという名称のデータベースが作成される。
#テーブルの作成
以下のコマンドでモデルを作成する。
rails generate model [modelname]
[modelname]はモデル名を入力する。
以下のコマンドでmigrateを行う。
rails db:migrate
以下のコマンドでテスト用のmigrateを行う。
rails db:migrate RAILS_ENV=test
テストを行う場合は、デフォルトでgemfileに書かれているテスト用gemの「chromedriver-helper」が非推奨となっておりエラーが発生するため、「webdrivers」に変更する。