はじめに
0から自作アプリを公開するの2回目となります。
前回からの流れ
Windows10 USキーボードを買ってからやったこと
Win10でWSL2とDocker Desktopをインストールする
イマココ
今回は2回目ということでRailsでの開発環境を作成します。
以下を説明していきます。
TL;DR
以下を実施してください。
これだけで以下の環境が完成します。
6.0系の最新なのでmimemagicのライセンス問題は回避できていると思います。
余談:
結論、休日溶かしました。
大きな理由は2つ。
1つ目は1回目に参考にした構築方法で全然うまくいかず完全に心が折れたので仕切り直ししたこと、
2つ目は改めて別のやり方で始めた際に、MySQL8系の最新でパスワードでログインできる設定が効かなくてrails db:createがいつまでたってもできなかったことです。
原因はDockerのLinuxディストリではMySQLではなくMariaDBが動くため、改めてMySQLを入れないといけなかったからです。
2つ目で参考にした構築方法は以下の通りです。
書いてある通りにやって、db:createできなくなったところで以下をdocker-compose.ymlに設定して、MariaDBをアンスコしてMySQLをインスコするだけです。
冗長な説明
ここからは自分用のメモになります。
いろいろ詰まりながら時系列に従ってRails環境ができるところまでを解説しています。
Ubuntu用のターミナルを起動する
マウントポイントに移動する
user@DESKTOP-3VUHBJT:~$ cd /mnt/c/Users/USER/Project/rails-docker/
Railsを立ち上げる
以下のように落ちちゃいました。
user@DESKTOP-3VUHBJT:/mnt/c/Users/USER/Project/rails-docker$ docker-compose run app rails new . --force --no-deps --database=mysql --skip-test --webpacker Creating network "rails-docker_default" with the default driver Creating volume "rails-docker_mysql-data" with local driver Pulling db (mysql:8.0)... ERROR: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.5:53: read udp 192.168.65.4:59722->192.168.65.5:53: i/o timeout
ググってもDNS設定しろとか、docker restartしろとかよくわからなかったので脳死で再起動してみました。(ハナホジ)
結果、うまくいきました。再起動 solves everything. (大嘘)
Railsは死んでるっぽいです。
よくよく調べてみたらrails newの時点ではbundle installしないので素直に次のステップを実行するだけでよさそう。
docker-compose upすると以下のエラーとなります。
/usr/local/bundle/gems/webpacker-5.2.1/lib/webpacker/configuration.rb:99:in `rescue in load': Webpacker configuration file not found /app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /app/config/webpacker.yml (RuntimeError)
言われた通り docker run rails webpacker:install すると以下のエラーになりました。
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "webpacker:install": executable file not found in $PATH: unknown.
ここでだいぶ時間を溶かしてしまったので別の方法でやることにしました。
仕切り直ししました
前回の記事のやり方で詰んでしまったので改めて別のやり方を探して以下をやってみました。
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
以下を実行する。
Organization: undefined Package manager: deb Project name: docker-image|noknow_app Docker image: noknow_app Platform: linux/amd64 Tested 422 dependencies for known vulnerabilities, found 468 vulnerabilities.
めっちゃやばそう(語彙力)。
とりあえず無視して手順を進めます。
本当はちゃんとやったほうがいいです。
セキュリティエンジニアにタコ殴りにされても文句言えません。
Mysql2::Error::ConnectionError Unknown MySQL server host 'db // The services key defined in docker-compose.yml.' (-2)
Mysql2::Error::ConnectionError: Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
どうやらDockerのLinuxイメージはMySQLではなくMariaDBとして起動するため、MySQLの設定ファイルであるmy.cnfを以下のように修正しても無駄っぽいです。(エラー内容が変わらなかったため)
[mysqld] default_authentication_plugin= mysql_native_password
以下の内容に従ってdocker-compose.ymlを修正します。
USER@DESKTOP-3VUHBJT MINGW64 ~/Project/noknow $ docker-compose run app rails db:create Creating noknow_app_run ... Creating noknow_app_run ... done Created database 'noknowApp_development' Created database 'noknowApp_test' USER@DESKTOP-3VUHBJT MINGW64 ~/Project/noknow $ docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------- noknow_app bash -c rm -f tmp/pids/ser ... Up 0.0.0.0:3000->3000/tcp noknow_db docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
できた!(つらかった)