はじめに
Windows OS上でRedmineを動かす環境を用意し、さらにプラグイン開発環境も用意するのはかなり難儀なので、Windows OS上に仮想マシン(VMware、VirtualBox、Hyper-Vなど)を入れてその上にLinux OSを入れてRedmineを動かしていました。
ここで、最近のWindows 10アップデートでは、Windows Subsystem for Linux(以降WSLと呼ぶ)が標準で搭載されるようになったので、このWSL上にopenSUSEを入れて(Windowsストアから無償インストール)Redmineを動かし、プラグイン開発環境にしてみました。
しかし、WSL上でのRailsサーバーの起動やマイグレートコマンド、テストコマンドの実行にかなり待たされます。あまりに遅いので少し調べてみると、/mnt/d/... のように/mnt配下になるファイルのアクセスは、/mnt以外のファイルのアクセスに比べて数段遅いとありました。
そこで、WSL上の/mnt配下、/home配下、そして仮想マシン上でそれぞれRedmineのコマンドを実行した場合の時間を比べてみました。
環境
実行時間の計測
この環境で、次の項目の実行時間を測ってみました(ストップウォッチ目測)。
No. | 項目 | WSL(/mnt/下) | WSL(/home/下) | Hyper-V | |
---|---|---|---|---|---|
1 | PUMA起動 | 37秒 | 14秒 | 3秒 | |
2 | pluginのmigreate | 40秒 | 15秒 | 4秒 | |
3 | minitest unit | 48秒 | 18秒 | 7秒 |
コマンドラインは次の通りです。
1のPUMA起動
bundle exec rails server -b 0.0.0.0
2のplugin migrate(pluginsディレクトリ下には1つだけプラグインを配置、既にmigrate済みの状態で実行)
3のunit test(3ファイル、27 runs, 57 assertions)
bundle exec rails redmine:plugins:test:units NAME=RAILS_ENV=test
結果
Windows上の作業領域にredmineを展開すると、WSLのLinux上では/mnt/以下のパスとなるので圧倒的に遅くなります。
/home以下に展開すると幾分改善されますが、それでもHyper-V上よりも数段遅いという結果でした。
その他
WSLでの問題
Windows 10をスリープしながら使っていると、WSLの上でruby(rails)を実行するとクラッシュ(コアダンプ)するようになります。こうなると、Windows 10を再起動しないと解消しません。すべてのWSLコンソールを落とすと解消しました。
$ bundle exec rails server -b 0.0.0.0 => Booting Puma => Rails 5.2.0 application starting in development => Run `rails server -h` for more startup options /home/foo/redmine/vendor/bundler/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/callbacks.rb:676: [BUG] pthread_cond_timedwait: Invalid argument (EINVAL) ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux-gnu] -- Control frame information ----------------------------------------------- c:0081 p:---- s:0426 e:000425 CFUNC :require :