より正確に言うと、libpqのversion10系以上がインストールできなくて困っていた
サマリー
libpqのversion10系以上がインストールは、 /etc/apt/sources.list に deb http://ftp.jp.debian.org/debian sid main
を追加して apt-get updateをしたら解決した。
docker-compose で rake db:createできないのは、ベースイメージをruby:2.7.4-silm から ruby:2.7.4 にすることで解決した
本題
dockerないし、docker-composeでrails の環境を構築しようとして、私は何度もつまずいている。 原因は毎回違うが、他にも詰まる人がいるかもしれないので、いくつか書き留めて置こうと思う。
環境構築の手順は基本的に、公式のdockerでrails環境を作成する手順 に従えばいい。しかし、OSの違いや、記事が古くなったことによってうまくいかないことはある。私も、つい数ヶ月前はこの手順通りでうまくいったはずが、今回は詰まった。
はまったのは
SCRAM authentication requires libpq version 10 or above Couldn't create 'myapp_development' database. Please check your configuration.
というエラー。 docker-compose run web rake db:create
を実行したときに出てきて進めなくなった。
SCRAM認証とはpostgresqlが導入している認証形式である。 軽く調べると、この認証を迂回してmd5形式にする方法も出てくるが、md5では心もとない。
そもそもSCRAM認証が導入されたのはずっと前で、古いライブラリしか入っていない事自体、問題である。
エラーメッセージの libpq
というのが、C言語で書かれた libpq-dev
というライブラリで、 postgresql
にアクセスするときに使われている。ほとんどの言語でクライアントライブラリで使われているようなので、railsに限らずここではまる人はいるだろう。
それでは、コンテナの中に入って libpqが入っているか確認してみる。 usr/lib
下に無いライブラリのほうが多いが、一応。
/myapp# ls -a /usr/lib/ | grep pq # 結果は何も帰ってこない
コンテナの中にいるので、そのままlibpqをインストールしてみる
myapp# apt-get install -y libpq-dev Reading package lists... Done Building dependency tree Reading state information... Done libpq-dev is already the newest version (9.6.23-0+deb9u1).
どうやら入っていたらしい。しかしバージョンが9系だ。エラーメッセージは10以上を入れてくれと言ってるので、これでは不足。
apt list
しても9系しかでてこない。
libpqに問題があるとか、 libpq5を先にインストールするような記事もでてきたが、どうもうまくいかない。該当のバージョンがないといわれる。
apt-get は /etc/apt/sources.list に書かれているURLに行ってパッケージを探しにいくので、libpq-devがあるURLを追加して apt-get update を走らせる
deb http://ftp.jp.debian.org/debian sid main # 追加
すると、先程のコマンド ( apt-get install -y libpq-dev
)で
libpq の14系がインストールできた。
rake db:create
を打つと、問題なく databaseが作成できた。
これで終りかと思ったが、 コンテナの外に出て、
docker-compose run web rake db:create
と打つと、最初のpostgresqlのエラーがでた。コンテナ内でコマンド実行するのと、コンテナの外から実行するので権限周りが違うのかと思い、いろいろと調べたがうまく行かず、
ベースイメージをruby:2.7.4-silm にしていたので、 ruby:2.7.4 にして、Dockerfile内で
echo 'deb http://ftp.jp.debian.org/debian sid main ' >> /etc/apt/sources.list
を追加して最初からやり直したらうまくいった。 -slim
が何かの問題を起こしていたのだろうが、詳細はわからなかった。
注意点 / チェックポイント
間違えやすいポイントは、追加するURLが /debian/
までであることと、 /etc/apt/sources.list を変更した後に apt-get update を走らせること。