LoginSignup
6
3

More than 3 years have passed since last update.

rails6で ActiveRecord::NoDatabaseError を解決する

Last updated at Posted at 2020-07-17

ハードはMacBook Air, 開発環境はVScodeを用いています。

前回の記事(rails new でデータベースをPostgreSQLにする)に付随するエラーの解決方法です。


:small_red_triangle_down:前回の内容

PostgreSQLをデータベースに指定
$ rails _5.1.6_ new アプリ名 --database=postgresql

これをrails6で実行し、

$ rails server

でサーバーを立ち上げ、localhost:3000にアクセスすると、
ActiveRecord::NoDatabaseError というエラーが発生します。

これは、データベースが存在していないことが原因で起こるエラーです。

解決方法 データベースを作る

自動でやる方法

まず、rails new で生成したディレクトリに移動してください。

$ cd 作成したディレクトリ

次に

$ rails db:create

を実行してデータベースを生成します。
config/database.yml の内容に沿ってデータベースが自動で生成されます。

手動でやる方法

まず、rails new で生成したディレクトリに移動してください。

$ cd 作成したディレクトリ

次に、config/database.yml を書き換えます。

config/database.yml変更前
~省略~

development:
  <<: *default
  database: アプリ名_development

~省略~
config/database.yml変更後
~省略~

development:
  <<: *default
  database: アプリ名_db
  host: localhost
  encoding: utf8
  reconnect: false
  username: 自分のユーザー名

~省略~

※ database:はデータベース名なのでわかりやすくdevelopmentをdbに変更
その他(hots,encoding,recconect,username)に関しても、一応追記しなくても解決できるが、追記することを推奨。

次に、SQLを立ち上げます。

$ psql -h localhost -p 5432 -U 自分のユーザー名 -d postgres

psql (12.3)
Type "help" for help.

postgres=# 

この辺のコマンドについては
https://www.postgresql.jp/document/9.3/html/app-psql.html
に詳しく載っています。

($ psql -h localhost -d postgres ←これだけでも一応解決できました。)

このコマンドを実行すると、SQL文を入力できるようになります。
ここにデータベースを作成するSQL文を書いていきます。

入力前
postgres=# 
入力後
postgres=# create database アプリ名_db;

ここで、アプリ名_dbは、最初に config/database.yml で指定した database:アプリ名_dbを入力しています。

実行後
postgres=# create database アプリ名_db;
CREATE DATABASE
postgres=# \q

最後に \q を入力すると、抜けることができます。

これでもう一度 $ rails server でサーバーを立ち上げて、localhost:3000 にアクセスしてみてください。エラーは解消されているはずです。

無事に解決しました!

役に立ったら是非LGTMボタンをポチッと押していただけると嬉しいです。
一緒に Rails学習 頑張りましょう!:raised_hand_tone1:

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