たくろぐ!

仕事はエンジニア、心はアーティスト

【0から自作アプリを公開する(2)】WSL2(Ubuntu 20.04.2 LTS)でRails環境をセットアップする

はじめに

0から自作アプリを公開するの2回目となります。

前回からの流れ

Windows10 USキーボードを買ってからやったこと

takkuso.hatenablog.com

Win10でWSL2とDocker Desktopをインストールする

takkuso.hatenablog.com

イマココ

今回は2回目ということでRailsでの開発環境を作成します。

以下を説明していきます。

TL;DR

以下を実施してください。

noknow.info

taker.hatenablog.com

これだけで以下の環境が完成します。

6.0系の最新なのでmimemagicのライセンス問題は回避できていると思います。

hackmd.io

余談:

結論、休日溶かしました。

大きな理由は2つ。

1つ目は1回目に参考にした構築方法で全然うまくいかず完全に心が折れたので仕切り直ししたこと、

2つ目は改めて別のやり方で始めた際に、MySQL8系の最新でパスワードでログインできる設定が効かなくてrails db:createがいつまでたってもできなかったことです。

原因はDockerのLinuxディストリではMySQLではなくMariaDBが動くため、改めてMySQLを入れないといけなかったからです。

2つ目で参考にした構築方法は以下の通りです。

noknow.info

書いてある通りにやって、db:createできなくなったところで以下をdocker-compose.ymlに設定して、MariaDBをアンスコしてMySQLインスコするだけです。

taker.hatenablog.com

冗長な説明

ここからは自分用のメモになります。

いろいろ詰まりながら時系列に従ってRails環境ができるところまでを解説しています。

Ubuntu用のターミナルを起動する

Ubuntuアプリを起動する
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. (大嘘)

Docker Desktop Backend
Docker Desktop Backend

Railsは死んでるっぽいです。

Container status screen of Docker Desktop
Container status screen of Docker Desktop

Could not find gem 'mysql2 (~> 0.5)' in any of the gem sources listed in your Gemfile.
Could not find gem 'mysql2 (~> 0.5)' in any of the gem sources listed in your Gemfile.

よくよく調べてみたらrails newの時点ではbundle installしないので素直に次のステップを実行するだけでよさそう。

docker-compose buildを実行する
docker-compose buildを実行する

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.

ここでだいぶ時間を溶かしてしまったので別の方法でやることにしました。

仕切り直ししました

前回の記事のやり方で詰んでしまったので改めて別のやり方を探して以下をやってみました。

noknow.info

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

以下を実行する。

snyk.io

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

qiita.com

どうやらDockerのLinuxイメージはMySQLではなくMariaDBとして起動するため、MySQLの設定ファイルであるmy.cnfを以下のように修正しても無駄っぽいです。(エラー内容が変わらなかったため)

[mysqld]
default_authentication_plugin= mysql_native_password

以下の内容に従ってdocker-compose.ymlを修正します。

taker.hatenablog.com

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

できた!(つらかった)

f:id:takkuso:20210411171234p:plain
Railsのアレ