どうも、三町哲平です。
前回書いたDocker3.0.0にアップデートしたら、なんか起動しなくなった件 - Qiitaで、
話は、脱線しましたが、2.5.系にダウングレードする事で今回の3.0.0でのエラーに関しては間違いなく解決されています。2.5.0(別のエラー発生)に関しては、機会があれば記事にしますが、たぶん正攻法の様なやり方をしていないので、日記みたいにな記事になりそうで、書くかどうか迷っています。
...と書きましたが、前回記事を投稿したのが2020/12/12で、本日が2020/12/31の大晦日。
だいぶ日数が空いてしまいましたが、上記の__たぶん正攻法の様なやり方をしていない__やり方についてご紹介。
正攻法ではないやり方とは?
__1から環境構築__以上!!!
はい、本当にそれだけです。大したことないですね...。
でもこれだけでは駄目なので、もっと深いところまで突っ込むとするならば、
Docker-composeで環境を再構築した後に、Railsアプリの内容(MVCモデルの内容等)を完全復元するために、途中まで制作していた旧Railsアプリ→新Railsアプリへの移行が必要だと思うのですが、
その際にコピペしたファイルは
- appディレクトリ全交換
- testディレクトリ全交換
- publicディレクトリ全交換
- dbディレクトリ全交換
- configディレクトリのdatebase.yml以外全交換
これでDBを一新して、同じRailsアプリの制作を行うことができました。
その他、アプリ名を変更の際は、
Railsのアプリ名を変更して、GitHubのリポジトリ名を変更するまで - Qiitaを参考にしながら行えば問題ないはずです。
私の場合は、アプリ名を__illustrations__→__illustration__に微修正しましたので、アプリ名変更後、上記の1.〜5.を実行して復旧しました。
どういうエラーが出たのか?
再度になりますが、詳しくは前回の記事Docker3.0.0にアップデートしたら、なんか起動しなくなった件 - Qiitaを読んでほしいのですが、一部抜粋すると...
因みに私のDockerのバージョンは、
2.5.1→3.0.0(今回のエラー発生)→2.5.0(別のエラー発生)→3.0.1(2.5.0の時と同じエラーの為、対応中)
となっております。
...↑これの、__2.5.0(別のエラー発生)→3.0.1(2.5.0の時と同じエラーの為、対応中)__←この部分の__別のエラー__というのが、__PG::ConnectionBad__エラーになります。
ちなみにこの時は、環境再構築で対応したのですが、なんとその1週間後には、__3.0.2__という最新バージョンが出て、アップデートをするとまた、同じ__PG::ConnectionBad__が発生してしまいました。
PG::ConnectionBadとは?
調べて見ると色々原因は出てきたのですが、要約すると__postgresqlへの接続が出来ませんよ!__というエラーです。先程まで使用できていたpostgresqlがDockerをアップデートすることで使えなくなる。これは、困りますよね...
結論
Docker Preference(設定) > Experimental Features > Use gRPC Fuse for file sharing をオフる(デフォルトではONになっています)
結局これが答えなんですね。
これをすることで、データベースの接続が問題なくできて、__PG::ConnectionBad__が発生しません。
Use gRPC Fuse for file sharing って何なんだろう?と思って、Google翻訳で調べたのですが、
Use gRPC Fuse for file sharing → (日本語訳)実験的機能>ファイル共有にgRPCヒューズを使用
う〜ん...イマイチ分かりませんね。
私が探した中では、最近(2020/08)のDocker for Macのファイルアクセス遅い問題事情メモ - Qiita←コチラの記事が一番参考になったのですが、今回の件に直結する部分を抜粋の上、要約しますと
gRPC-FUSEというファイルシステムが新たに導入されて、デフォルトではON状態なので、場合によっては、設定で古いやつ(osxfs)に切り替えて使用する。
となります。
つまり、Use gRPC Fuse for file sharingをOFFにする使い方というのは、レガシーなやり方なんですね。いずれ変更する必要があるのかもしれませんが、それはまた後日ということで...。
さいごに
ここである一つの疑問が私の中で生まれました。
まずこの記事は私個人の備忘録として書いた記事なので、内容は非常に伝わりにくかったと思いますが、さらに何の話?となり兼ねない事が前提での追記として、
前回の記事Docker3.0.0にアップデートしたら、なんか起動しなくなった件 - Qiitaの
因みに私のDockerのバージョンは、
2.5.1→3.0.0(今回のエラー発生)→2.5.0(別のエラー発生)→3.0.1(2.5.0の時と同じエラーの為、対応中)
となっております。
から、__2.5.0(別のエラー発生)__の所、この時点で
Cannot start service ec-cube: Mounts denied
ERROR: Encountered errors while bringing up the project.
↑このエラーは消えましたが、
↑この__PG::ConnectionBad__エラーが発生したという意味で書いたのですが、
この時に念のため、
__Use gRPC Fuse for file sharingは、OFF__にしているつもりでした。
しかし、Use gRPC Fuse for file sharingをOFFにしていた場合、今回の理屈で行くと、Dockerのバージョンが、2.5.0の時点で、__PG::ConnectionBad__は発生しなかったはずです。
私は思ったのですが、「Use gRPC Fuse for file sharingは、OFFにしている__つもり__でした。」の時に
① Use gRPC Fuse for file sharingをOFFにする。
② Apply & Restartを押す。
この__② Apply & Restartを押す。__を忘れていただけなのでは、ないのでしょうか?
凄い初歩的なミスをしていました。