#はじめに
EC2を使ってAWSにデプロイをする際に環境変数をまとめておく場所として利用しました。
ここでエラー多発して1ヶ月くらい解決できなかった事があったので復習としてまとめます。
DBへアクセスする情報の受け渡し
DBへアクセスする情報(ユーザー名やパスワード等)をdatabase.ymlへ直接記入すると問題があるので、環境変数で情報の受け渡しをしました。
最初はdotenv-rails
を導入して.env
内に記述しました。
SECRET_KEY_BASE=シークレットキー
DB_NAME= データベース名
DB_USERNAME= root
DB_PASSWORD= 0000
DB_HOSTNAME= ap-northeast-1.rds.amazonaws.com
上記のように記述し、capistranoのbundle exec cap production deploy
をした所、私の記述方法に誤りがあったのかエラーとなりました。
Mysql2::Error::ConnectionError: Access denied for user 'ec2-user'@'localhost' (using password: No)
記事を調べてcredentials.yml.encを知りました。
ターミナル内で
$ EDITOR="vi" bin/rails credentials:edit
する事でファイルが開きます。
そこに環境変数を記述しました。
# User as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 00000000000
db:
NAME: データベース名
USERNAME= root
PASSWORD= 0000
HOSTNAME= ap-northeast-1.rds.amazonaws.com
escキー :wq
で完了。
その後、VScord内のdatabase.yml
に下記を記述します。
production:
<<: *default
database: <%= Rails.application.credentials.db[:NAME] %>
username: <%= Rails.application.credentials.db[:USERNAME] %>
password: <%= Rails.application.credentials.db[:PASSWORD] %>
host: <%= Rails.application.credentials.db[:HOSTNAME] %>
socket: /var/lib/mysql/mysql.sock
そして最後にcapistranoのbundle exec cap production deploy
をすると自動デプロイが成功しました。
おわり
VScord内で直接書き込んでcredentials.ymlをおかしくしてしまったりして削除していいのかどのように編集すればいいのか調べて時間がかかりました。
参考
AWSデプロイで参考にさせて頂いた記事
credentialsで参考にさせて頂いた記事
DB設定で参考にさせて頂いた記事