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対象にしないで、git addの候補から外す。めも。 https://t.co/v2jsizBLCl #Qiita
— りーず Leez(そーめる) (@so_meru) September 4, 2019
.gitignoreでバージョン管理をやめると、プッシュしたときにそのファイルがHeroku上から削除されてしまうので、
その方法はやめて、git update-index –skip-worktree database.yml
としてあげるセンで進めてみよう…
— りーず Leez(そーめる) (@so_meru) September 4, 2019
上のツイートにある通り、
.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