4
3

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.

Railsでdb:createすると謎のsyntax errorが出る

Last updated at Posted at 2019-07-24

Railsのプロジェクトをデプロイする際に、Railsの仕様を知らなくてハマってしまった話。

#本番環境

  • Rails5.2.3
  • Mysql5.7
  • EC2 (Amazon Linux AMI 2018.03.0.20190611 x86_64 HVM gp2)
  • RDS (エンジンバージョン 5.7.22)

(どんなこと書けばいいかわからない、、、)

#エラーメッセージ
bundle exec rails db:create RAILS_ENV="production"すると下のようなエラーが出てしまう。

Caused by:
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.`cxngxxxxxxxx`.`ap-northeast-1`.`rds`.`amazonaws`.`com` DEFAULT CHARACTER SET `' at line 1
database.yml
default: &default
  encoding: utf8
  adapter: mysql2
  database: sochan-db
  pool: 5

production:
  <<: *default
  host: <%= ENV['DATABASE_URL'] %>
  port: 3306
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
.env
DATABASE_URL = "sochan-db.cxngxxxxxxxx.ap-northeast-1.rds.amazonaws.com"
DATABASE_PASSWORD = "hogehoge"

database.ymlがおかしいのかなと思い見てみたけど、特に変なところはないような気がする。
そもそもRDSに繋がっているのかとhostが間違っていないか確認してみた。

[ec2-user@ip-xx-xxx]$ mysql -u root -p -h sochan-db.cxngxxxxxxxx.ap-northeast-1.rds.amazonaws.com
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.7.22-log Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

繋がるなー
どこが、間違っているのかさっぱりわからない。
ymlファイルにタブとか**#**が入ってたりするとうまく動かないことがあるらしいので、1行ずつ見ていったけど、特に変なところはなかった。

[ec2-user@ip-xx-xxx]$bundle exec unicorn_rails -c /var/www/rails/project/config/unicorn.conf.rb -D -E production
master failed to start, check stderr log for details
[ec2-user@ip-xx-xxx]$cat log/unicorn.log 
I, [2019-07-23T20:02:48.830017 #22402]  INFO -- : Refreshing Gem list
I, [2019-07-23T20:02:49.412202 #22402]  INFO -- : unlinking existing socket=/var/www/rails/project/tmp/sockets/.unicorn.sock
I, [2019-07-23T20:02:49.412355 #22402]  INFO -- : listening on addr=/var/www/rails/project/tmp/sockets/.unicorn.sock fd=9
E, [2019-07-23T20:02:49.470715 #22402] ERROR -- : Unknown database 'sochan-db.cxngxxxxxxxx.ap-northeast-1.rds.amazonaws.com' (ActiveRecord::NoDatabaseError)

unicornを起動しようとしても、databaseがないと言われる。でも、databaseが作れない。
hostとpasswordを直打ちにしてみても、同じエラーがでる。

#結論
エラーメッセージをよく見返すと、databaseの名前にhostが入っていた。
どうやら、 ENV['DATABASE_URL']という環境変数はRailsの仕様で、database.ymlの内容に関わらず、優先されるらしい。
hostとpasswordを直打ちで試してみた際には、.envを消していなかったので、database.ymlより優先されて読み込まれることで、databaseの名前がhostになるという現象が起こってしまった。

ENV['DATABASE_URL']ENV['DATABASE_HOST']

に変えることにより無事解決。

#終わりに
rails database_urlとかで検索すると普通に出てきたけど、そこが間違っていると思っていなかったので、うまく検索で見つけられなかった。
ここは、絶対あってるってとこが間違ってました、、、

4
3
2

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?