Dockerの開発環境へ移行した結果、Rspecでよく使っていたsave_and_open_page
に以下のエラーが発生するようになってしまいました。
Failure/Error: save_and_open_page
Launchy::CommandNotFoundError:
Unable to find a browser command. If this is unexpected, Please rerun with environment variable LAUNCHY_DEBUG=true or th
e '-d' commandline option and file a bug at https://github.com/copiousfreetime/launchy/issues/new
htmlファイル自体は保存されるので、それを手動で開けば見れるのですが、毎回このエラーが出るのは都合が悪い…
ので、擬似的にsave_and_open_page
と同様の動きをする方法を考えてみました。
#前提
save_and_open_page
で保存されるhtmlファイルがローカル環境であること。
(docker-compose.yml
でローカルのディレクトリをマウントしていること)
services:
rails:
build:
context: .
dockerfile: ./docker/rails/Dockerfile
volumes:
- .:/app
#1.fswatch
のインストール
ファイルを監視するためにfswatch
をローカル環境でインストールしてください。
Macの体で記載しますが、Windows、Linuxでも導入可能だそうです。
$ brew install fswatch
#2.監視コマンドの実行
以下のコマンドを実行してください。
$ while true; do fswatch -e ".*" -i ".*\.html$" --event Created -1 <HTML保存先パス> | xargs open -a <ブラウザ>; done
-e
:監視対象から除外
-i
:監視対象のファイルを指定 ←-e
のオプションとの併用が必要
--event
:監視対象のイベントを指定、Created
でファイルが作成されたときのみコマンドを実行させる。
-1
:1回のみ監視 ←while
の記述で繰り返し監視する
-
-1
を省いたfswatch〜<ブラウザ>
のみのコマンドだと、htmlファイルを何回も開く挙動となってしまったため、-1
をつけ繰り返す形としました。 - 終了するときは
ctrl + c
。
$ while true; do fswatch -e ".*" -i ".*\.html$" --event Created -1 ~/app/tmp/capybara/ | xargs open -a "Google Chrome"; done
#3.save_page
の挿入
キャプチャを確認したい場所でsave_and_open_page
ではなく、save_page
を挿入してください。
open
しないので、エラーは発生しなくなります。
これでrspec
をDocker環境上で実行しても、ローカル環境のブラウザが自動で開き、ページを確認できるようにできます。