概要
Renderを使用してオリアプを本番環境へデプロイをする時に、本番環境のPostgreSQLデータベースに初期データを投入する方法が分からず、解決までに時間を掛けすぎてしまった為、解決方法をここに纏めます。
本番環境に投入するデータは都道府県データです。
環境
- Rails 6.0.6.1
- ruby 2.6.5
- PostgreSQL
- Render
初めに試したこと
seeds.rb
に都道府県データを作成後、
History.create(name: '北海道')
History.create(name: '青森県')
History.create(name: '岩手県')
History.create(name: '宮城県')
History.create(name: '秋田県')
#以下省略
上記データを本番環境に投入する為に、下記コマンドをターミナル上で実行。
rake db:seed RAILS_ENV=production
すると、「データベースにアクセスするためのソケットが見つからず接続できない、サーバーはローカルで実行されそのソケットでの接続を許可していますか?」とエラーメッセージが出現。
PG: :ConnectionBad: connection to server on socket "/tmp/. s.PGSQL.5432» failed: No such file or directory
Is the server running locally and accepting connections on that socket?
このエラーを解決するために、ググりまくっていたところ、下記記事を発見。
https://qiita.com/show1107/items/5dbdac581d561909cf84
記事はheroku
に関する内容でしたが、rails db:seed RAILS_ENV=production
コマンドでは本番環境にデータを投入することは出来ず、RenderもRenderの仕様に沿ったコマンドを実行しなければならないのでは?と考えました。
Renderへ初期データを投入する方法
色々と調べた結果、以下方法でRender本番環境データベースに初期データを投入することが出来ました。
Renderでアプリの新規作成をする際に、Settings
内のBuild Command
にrender-build.sh
を指定していました。
スクールのカリキュラムを参考に流れ作業で進めていたので、このファイルが何のためにあるのか全く理解出来ておりませんでしたが、このBuild Command
ではデプロイ実行時のコマンドを設定しており、render-build.sh
を指定することで、render-build.sh
ファイルに記述しているコマンドをデプロイ時に実行してくれるみたいです。
入力欄 入力内容
Build Command ./bin/render-build.sh
その為、render-build.sh
にbundle exec rails db:seed
を追記し、デプロイしたところ、無事に本番環境に初期データを投入することが出来ました。
#!/usr/bin/env bash
# exit on error
set -o errexit
bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean
bundle exec rake db:migrate
bundle exec rails db:seed
備考
Build Command
にrender-build.sh
を指定してコマンドを実行する方法以外にも、Build Command
に実行するコマンドを直接入力して指定する方法でも良いみたいです。
bundle install && yarn install && bundle exec rake assets:precompile && bundle exec rake assets:clean && bundle exec rails webpacker:compile && bundle exec rake db:migrate && bundle exec rails db:seed