【メモ】database.ymlをgitの管理から外してデプロイしたかった【Rails、Heroku】

HerokuにRailsをデプロイする際に、database.ymlをgitの管理から外してデプロイしたやり方をメモ。何をどうしたかだけメモっておきます。
(合ってるか分かりません。)

まず、
.gitignoreファイルの
/config/database.yml

となっている行をコメントアウトします。これでgitの管理対象になるはず。

そうしたら、
config/database.ymlファイルの

development:
<<: *default

というところにローカルのpostgresqlのユーザー名とパスワードが書かれているので、
これをカットして、一旦メモ帳に置いておきます。

その後、

# production:
# <<: *default
# database: XXXXXXXXXXXXXXXX
# username: XXXXXXXXXXXXXXXX
# password: <%= ENV[‘SONGSTORY_APP_DATABASE_PASSWORD’] %>

(XXXXXXXXXXXXXXXXは、値が入っています。)

となっている行をすべてコメントアウト。

そして、

production:
url: <%= ENV[‘DATABASE_URL’] %>

というコマンドを追記します。これだけでどうやらHerokuでは繋がるらしい(?)。

 

そうしたら、一旦

ターミナルで

git add .

git commit -am “コメント”

git push heroku master

として、デプロイします。これでPostgresqlにアプリケーションが繋がるようになるはず。
(もちろん、事前にPosgtresqlのデータベースは作成しておいて下さい。)

その後、/config/database.ymlファイルをgitの管理から外します。

.gitignoreファイルの
/config/database.yml

をコメントアウトしていたものを元に戻します。

さて、これであとはローカルのユーザー名とパスワードを
先程のメモ帳からコピペして、元に戻します。

 

と、ここで問題が発生。

git statusコマンドを打つと、
modified: config/database.yml

と表示されてしまいました。git管理から外したはずなのに何故。

そこで、
「database.yml 等の Git管理」
https://qiita.com/tajihiro/items/38815d4ebc4bddddc3ad

ここに書かれていたように、

$ git rm –cached database.yml

というコマンドを打ちます。
カレントディレクトリの位置がアプリのフォルダの中だったので

git rm –cached config/database.yml

と打ちました。

そうしたら、

git statusで

deleted: config/database.yml

と表示されました。

これはこのままadd、commit、pushしたらHeroku上からdatabase.ymlは消されてしまうのでしょうか?

よく分からなかったので、add、commit、pushしておきました。

…と、ここまでが今回行ったことです。
改めて書いてみると、間違っている匂いがしますね。
git statusをしたときに

Changes to be committed:
(use “git reset HEAD <file>…” to unstage)

というメッセージが出ていたので、unstageしておけば良かったのかな?

いずれにせよ、gitignoreファイルにdatabase.ymlを指定していたのですが、変更しようとすると
modifiedになってしまっていたのです。これで一旦は管理から外れました。

Heroku上でファイルを確認したいところですが、それはまた次回。

とりあえずのメモでした。

参考:

「Heroku PostgresをRailsアプリで利用する手順」
https://qiita.com/NaokiIshimura/items/550ca82e8e57aaea5582

「database.yml 等の Git管理」
https://qiita.com/tajihiro/items/38815d4ebc4bddddc3ad

「HerokuのDBにローカルPCからアクセスしたいんだけど…」
https://qiita.com/akiko-pusu/items/305e291465d6aac04bf3


その後のこと

その後、
heroku run bash

コマンドでHerokuの中のファイルを確認してみると、やはりHeroku内のdatabase.ymlファイルが消えていました。

database.ymlの最初のファイルだけプッシュして、あとはGit管理から外す方法を探っていきたいと思います。

参考:
「heroku内のコードを確認する方法」
https://teratail.com/questions/111988


これでいけるかもしれません。

「git管理している途中から.gitignoreを追加して、その設定を反映させる方法」

https://qiita.com/kamesennin/items/226e3839e457b342b89f


その後2

結局上の方法は使いませんでした。

上のツイートにある通り、
.gitignoreで対象ファイルを管理していると、プッシュ(デプロイ)した時点でignoreされているファイルがHerokuから消えてしまいます。
管理から外すわけですから、Herokuのデプロイからも外れてしまいます。
これでは、Heroku側にデータベースの設定を渡せない訳です。

そこで、.gitignoreで管理を外す方法はやめて

git update-index –skip-worktree database.yml

というコマンドでファイルを管理から外しました。

この方法に変えたところ、database.ymlのローカルの設定は自由にいじれて、
heroku run bash
でHeroku側の設定を確認してみたところ、最後にプッシュしたファイルが残っていました。

あとはこれで実際にデータベースを管理してみて、反映されるか確認したいと思います。

ひとまずこの状態で運用していきたいと思います。

参考:
「既に git 管理しているファイルをあえて無視したい」
https://qiita.com/usamik26/items/56d0d3ba7a1300625f92