この記事の意図
WebサーバーとDBサーバーが別の環境で capistrano-db-tasks
の pg:pull
を実行したときに pg_dump
の バージョンがそれぞれ違うということでエラーになり、解決したので共有します。
環境
EC2(amazon linux)からRDS(PostgreSQL)接続のRailsアプリケーションです。
サーババージョン(RDS): 12.5、pg_dump バージョン(EC2): 9.2.24
解決方法
EC2のpg_dumpのバージョンを12にすればOKなはずです。
amazon linuxにはこの時点でpostgresqlの12は用意されていないようなので下記を参考に12をインストールしました。
今回pg_dumpさえ動けばいいのでサーバーは立てる必要はないと思います。
このままですとpg_dumpがバージョン9を見てしまうのでcapistranoでログインしているユーザーの.bashrcにパスを追加します。
export PATH=/usr/pgsql-12/bin/:$PATH
.bashrcを読み直します。
$ source .bashrc
これでローカルからpg:pullを実行して動きました。
注意
.bash_profileでは動きませんでした。理由は.bashrcがSHELL_VARIABLE、.bash_profileはENVIRONMENT_VARIABLE、という違いがあるからのようです。capistranoでアクセスする時はsshなのでSHELL_VARIABLEしか見てくれないという理解をしています。