【Railsチュートリアル】Windowsローカル環境で困ったことと解決した方法をまとめる【1周目】
Railsチュートリアルの1周目が終わったので、困ったことと解決した方法をまとめようと思います。
Railsチュートリアルは環境構築に躓かないようにクラウド開発環境のCodespacesを推奨しているのですが、Codespacesはちょっと放っておくと止まってしまうのでWindowsのローカル環境で構築しました。
Windowsのローカル環境で環境構築できたはいいものの、チュートリアルはCodespacesに合わせてLinux環境であることが基本的に前提として進んでいくので、所々詰まりました。なので詰まったところと解決方法についてまとめようと思います。(チュートリアル内の「困ったときのヒント集」にDockerでの構築手順も載っていたので、冷静にそっちで構築するべきだった、、、2週目はDockerでやろうと思います。)
開発環境
Windows11
VScode 1.89.1
ruby 3.2.3
Rails 7.0.4.3(チュートリアル準拠)
.html.erbファイルでHTMLが補完されない
RailsではRubyをHTML内で記述できるerbファイルというのを使うのですが、そのファイル内ではHTMLが補完されません。(divと書いてenterしても<div></div>に自動補完されない)
なかなか不便なのでググったら以下の情報で解決しました。
VS codeに標準搭載されている、HTMLやCSSのコード補完プラグインのemmetには、どのファイル内で何の言語の補完機能を有効化するか、という設定ができるので、erbファイル内でHTMLの補完を有効にする、という設定をする手順です。
DBがリセットできない(rails db:migrate:resetが実行できない)
チュートリアル内で、データベースをリセットして新しいモックデータを入れて~ということをちょこちょこ行うのですが、「Permission denied」を吐いて実行できないことがあります。(というか基本そうなりました。)
これは以下の情報が参考になりました。
WindowsのRailsのバグで、Rails自体がアクセスしているファイルの削除はRailsコマンドではできないようです。なので、直接そのデータベースファイル(.sqlite3)を削除した後、migrateしなおす方法で解決しました。
余談:データベースをmigrateした後にテストしようとするとテスト環境でもmigrateしろというエラーが出る
Railsは開発環境、テスト環境、本番環境それぞれ別々にDBのmigrateを行わないといけないらしく、開発環境でmigrateした後にテストを実行しようとするとテスト環境でもmigrateするようにとエラーを吐きます。
rails db:migrateコマンドで開発環境とテスト環境両方でmigrateできるようにする設定もあるっぽい?(そんな記述をどこかで見た気がしますが、見失ってしまいました)のですが、意味があって分けてるものだと思うので設定はそのままにし、習慣的に
rails db:migrate && rails db:migrate RAILS_ENV=test
で開発環境とテスト環境両方migrateするようにしてました。
rails serverを実行すると「ERROR: worker mode not supported on ruby on this platform」というエラーが出てサーバーを起動できない
Pumaファイルをカスタムしだしたどこかのタイミングでローカルでサーバーを起動できなくなりました。これは以下で解決しました。(第8章のところ)
チュートリアル7版ではPumaファイル内の以下の行をコメントアウトすると解決します。
workers ENV.fetch("WEB_CONCURRENCY") { 4 }
windowsではPuma(Railsを動かすアプリケーションサーバー)のワーカーモード(複数のプロセス=プログラムのインスタンスを立ち上げて平行処理するモード)がサポートされていないらしく、ワーカーモードのワーカー数を指定する上記の行をコメントアウトするとwindowsローカル環境でrails serverが実行できるようになります。
これはWindows固有の問題なので、開発に入るときにコメントアウト、pushするときにコメントアウト解除で対応してました。(もちろんたまに忘れる)。
「ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked」というエラーが出てデータベースがロックされる
seedファイルでモックデータをたくさんDB内に作るようになってから、データベースがロックされることがありました。メモ不足で解決方法が曖昧なのですが、以下の記事の③の手順で
.sqlite3ファイルを複製→オリジナルを削除→複製したファイルをオリジナルと同じ名前にする、で解決したか、先ほどのDBがリセットできない問題と同じように.sqlite3ファイルを削除してmigrateしなおしで解決したと思います。(これは解決というか力技)
1周目の感想
Rubyを書いている感覚がない
「現代プログラミングはコードを0から書くことより既存のライブラリやモジュール、フレームワークを使いこなすことが大事」みたいなことをどこかで聞いた気がするんですが、まさにそれを実感しました。全然Ruby書いてる感じがしません。どちらかと言うとノード型のローコードツールとかを使ってる感覚の方が下手したら近いかもしれないです。
テストとエラーは気持ちいい
「機能Aを実装したら、Bを実行するとCが返ってくるようになるはずなので、そうでないと失敗するテストをまず書く」というテスト駆動開発の概念がちょっと理解できた気がします。
テストによる意図的なエラーと上記のような環境依存のバグやエラーを除くと、全てのエラーはシンプルな誤字脱字で、ちゃんとエラーを読んでコードを慎重に確認すれば解決できたという成功体験を得られたのは良かったと思います。
先駆者たちに感謝
チュートリアル自体丁寧で詰まることなく進められるし、ググれば先駆者たちが情報を残してくれてるのが非常に助かりました。先駆者たちの情報の寄せ集めですがこの記事も訳に立つといいなと思います。
次はDockerで環境構築して2週目に入ろうと思います。
この記事が気に入ったらサポートをしてみませんか?