Windows と Docker、マウントボリュームを使用した開発における問題

こんにちは、Windows 上では開発できません。空白の画面が表示されてしまいます。コンソールを開くと、以下のエラーが表示されます。

(X) ember_jquery.js?1579775136.5740232:1 Uncaught Error: Errno::EEXIST: File exists @ dir_s_mkdir - /var/discourse/tmp/cache/assets/sprockets/v3.0/pr
  (in /home/gaijinsailor/.rbenv/versions/2.6.2/lib/ruby/2.6.0/fileutils.rb:239:in `mkdir')
    at ember_jquery.js?1579775136.5740232:1

これと類似のエラーが多数発生しています。

つまり、Discourse がスクリプトをロードできない状態です。スクリプトを別ウィンドウで開くと、以下のエラーが表示されます。

Script: http://localhost:3000/assets/locales/en_US.js?1579775136.5398135
Body: throw Error("Errno::EEXIST: File exists @ dir_s_mkdir - /var/discourse/tmp/cache/assets/sprockets/v3.0/x2\n  (in /home/gaijinsailor/.rbenv/versions/2.6.2/lib/ruby/2.6.0/fileutils.rb:239:in `mkdir')")

そこで調査を進めたところ、問題は Sprockets にあることに気づきました。Windows から Docker 内に Discourse のディレクトリをマウントしているため、ファイルシステムが大文字小文字を区別しません。Sprockets は、ext4 のような Linux 型のファイルシステム(大文字小文字を区別するディレクトリが作成できるもの)でのみ動作するようです。

この問題に対する解決策はありますか?
ありがとうございます

追記:この Sprockets の問題は GitHub でドキュメント化されています:FileStore cache patch in v3.6 causes directory name collisions in Windows · Issue #283 · rails/sprockets · GitHub
しかし、この issue はまだオープンで、解決策は見つかっていません :frowning:

面白いことに、昨日 @pixeltrix がこれを見つけ、このハックを使って回避しました:

WSL2 をインストールして、当社の WSL2 設定を使用することを強くお勧めします。こちらの方がはるかに高速で、理解しやすいです:

開発環境のインストールは簡単です。WSL2 をセットアップし、Docker をインストールしてから、当社の Docker 開発設定を使用するだけです。

「いいね!」 4

どうもありがとうございます。ハックは機能しました。
後で WSL2 を使ってみます。

「いいね!」 1