1
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 5 years have passed since last update.

【初心者向け】.ymlファイル内のデータが認識されない2つの理由

Last updated at Posted at 2020-01-27

Rubyonrailsを勉強し始めて2週間が経過したわけですが、特に私が落とし穴だなと思ったymlファイルの決まり事について紹介していきます。

.ymlファイルの決まり事①データを記述する際、データ間の空白を1行以上開けてはいけない

users.ymlを使って2人目のユーザー「archer」を追加したかったのでチュートリアル通りにコードをコピペして保存。

users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>




archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>

rails testをしたところ、'users' テーブルに'archer'という名前のカラムが入っていないというエラーが出ました。

 table "users" has no column named "archer"

知り合いに聞いたところ、YAMLファイルと言うのは結構厳密で余分なスペース一つ入るだけで動かなくなることもあるとのこと。

記述したファイルをみてみると4行ほど空いていました。

users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>

間を詰めたところ無事テストが通りました。

間を2行以上開けるとデータの判別がしやすくなるのですが、流石にこれは初心者泣かせですww

チュートリアルの中でも言及して欲しい内容でした。

.ymlファイルの決まり事②default: &default

一番上のdefault: &defaultと記述をして、それぞれの環境に <<: *defaultとつけてあげればデフォルトで記述したルールがそれぞれの環境に適応されます。

database.yml
default: &default
  pool: 5
  timeout: 5000
development:
adapter: sqlite3
  <<: *default
  database: データベース名
test:
adapter: sqlite3
  <<: *default
  database: データベース名
production:
  <<: *default
  encoding: utf8
  adapter: postgresql
  port: 5432
  database: データベース名
  username: ユーザー名
  password: パスワード
  host: ホスト名

したがって、下記のようにデフォルトをadapterを sqlite3としてしまうとそれぞれの環境でpostgresqlと記述しているのにもかかわらずsplite3が優先されてしまうので注意が必要です。

database.yml
default: &default
adapter: sqlite3
  pool: 5
  timeout: 5000
development:
adapter: sqlite3
  <<: *default
  database: データベース名
test:
adapter: sqlite3
  <<: *default
  database: データベース名
production:
  <<: *default
  encoding: utf8
  adapter: postgresql
  port: 5432
  database: データベース名
  username: ユーザー名
  password: パスワード
  host: ホスト名

その他のエラー

Please note that YAML must be consistently indented using spaces. Tabs are not allowed. 

空白がない、あるいはインデントを使って右にコードを押しやっているのでエラーが出てます、というメッセなのでその2点をチェックしましょう。

1
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
1
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?