Cloud9使わずローカル環境で実施していたせいか、チュートリアルに記載の通りに行ってもGuardがうまく動かなかった。
解決策をメモしておく。
概要
下記リンク、「3.6.2 Guardによるテストの自動化」に記載されているGuardの初期化、Guardfileの編集を行ったものの、自動テストが完了しなかった。
https://railstutorial.jp/chapters/static_pages?version=6.0#sec-guard
こんな感じで Running: ~
のあと [1] guard(main)>
と出たまま動かない。
00:52:47 - INFO - Running: test/controllers/static_pages_controller_test.rb
[1] guard(main)>
待っていれば結果が出てくるのかな?と思ったが、いつまで経っても何も起こらなかった。
念のため spring stop
コマンドも実行したが、
Spring is not running
と言われるだけで、再度 bundle exec guard
からやり直してみても状況は変わらずだった。
環境
OS:Windows10
Railsチュートリアルの版:第6版
コマンドはVSCodeのターミナル(powershell)で実行。
解決策
単にspringのパス違いだった。
サンプルからコピペしてきたGuardfileの2行目の
spring: "bin/rails test",
を
spring: "rails test",
に変えるだけで動くようになった。
# Guardのマッチング規則を定義
guard :minitest, spring: "bin/rails test", all_on_start: false do
watch(%r{^test/(.*)/?(.*)_test\.rb$})
# Guardのマッチング規則を定義
guard :minitest, spring: "rails test", all_on_start: false do
watch(%r{^test/(.*)/?(.*)_test\.rb$})
spring stop
する前に bin/spring stop
したときはエラーメッセージが出たのでパス違いだとすぐ気づけたけど、Guardさんはエラー情報を出してくれなかったから気づくまで時間がかかった。
今後もWindowsで開発していくにあたり、この手のパス違いの問題はよく出てきそうだから留意したい。
そもそも spring って何なんだ
Spring は Rails アプリケーションの preloader(プリローダー)の gem です。Rails アプリケーションをバックグラウンドで走らせたままにしておくことにより(pre + load = 前もってロードしておく)、bin/rails や bin/rake コマンドの2回目以降の起動時間が短縮されます。
とのこと。
spring stopしたときSpring is not runningって言われちゃったけど、これってちゃんとSpringが使えていないということなんだろうか……。