初めに
WSL1環境下で、Railsを動かしたときにちょっと引っかかった小ネタを紹介します。
環境設定
- OS: Windows10 Pro 64bit
- Version: 1909
- OS build: 18363.1256
- WLS
- Ubuntu 20.04
- Ruby 2.7.2
- Rails 6.0.3.3
BCrypt::Errors::InvalidHash: invalid hash
deviseを利用しており、またMacからWindows環境へ乗り換えたときに発生する可能性が高いのがこのエラーです。
Rails: BCrypt::Errors::InvalidHash (invalid hash) Devise 1.5.4 Rails 2.2.5
$ vi Gemfile
# To use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.13'
$ bundle update bcrypt-ruby
バージョンアップ以外にも、MacからUbuntu環境などに移行したときなどにも発生するようです。
該当gemのバージョンアップで解決できます。私の環境下では**bcrypt (3.1.16)**で正常に動くようになりました。
デーモンの自動起動設定
実はWSL1/及びWSL2環境下ではUbuntuのsystemctlが上手く動作しません。
WSL2環境下だとsystemctlを動かして、デーモンの自動起動設定ができるみたいですが
WSL1だと動かせないようです。
Windows 10 or 11 Home(WSL2)のUbuntuでsystemctlを利用する方法(systemdをPID1で動作させる方法) | Snow System
かといって、毎回デーモンを起動させるのは面倒なので
Windows10のWSL上にあるServiceを簡単に自動起動させる
こちらを試してみます。
- Windows + R で「ファイル名を指定して実行」を表示
- shell:startup と入力してEnter
-
C:\Users\[ユーザ名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
が開く
# file名 enable_wsl_service.bat
@echo off
wsl -u root -- service memcached start
wsl -u root -- service mysql start
上記ファイルを作成後は、Windows起動直後にサービスが立ち上がるようになります。
Letter Openerの設定
WSL環境上でletter_openerのGemを利用する場合、メール送信時にWebブラウザが起動してメールを表示してくれません。
以下の
Add Windows 10 WSL Support #157
# WSL上で実行 Chromeのパスを指定
export BROWSER='/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe'
こんな感じで、環境変数にブラウザのパスを指定してあげれば、動くようにはなりますが...
WSL側のパスを認識できない...本当なら/wsl$/Ubuntu-20.04/
というのが先頭についていてほしい...そこまで重要じゃなかったので今回はスキップします。letter_opener_webを使えばなんとかなりますし、最悪letter_openerのファイル保存パスをWindows側にすることで解決できます。
試してませんがwsluという解決策もあるみたいです。
最後に
WSL1でRails試してますが、概ね良好という感じです。