rails sコマンドでNo template for interactive requestというエラーが発生したときの対処法についてまとめています。
エラー内容と発生状況
rails generate controller home top
を実行し、rails s
で起動すると下記エラーがでる。
APPフォルダ、各種ファイル、ルーティング、コントローラーなどいずれも適切に生成できているのに、ページが表示されない。
「Rails generate controller フォルダ ファイル」は実行済みで、views/フォルダ配下に、ファイル.html.erb
ファイルは作成できている。
App名に記号やスペースは含んでいない。
APPを削除したり、ダウングレードしたバージョンで作成しても立ち上がらない。
▼エラー内容
No template for interactive request
HomeController#top is missing a template for request formats: text/html
NOTE!
Unless told otherwise, Rails expects an action to render a template with the same name,
contained in a folder named after its controller. If this controller is an API responding with 204 (No Content),
which does not require a template, then this error will occur when trying to access it via browser,
since we expect an HTML template to be rendered for such requests. If that's the case, carry on.
▼日本語訳
インタラクティブなリクエストのテンプレートはありません
HomeController#topにリクエスト形式のテンプレートがありません:text / html
注意!
特に断りのない限り、Railsは、
コントローラにちなんで名付けられたフォルダに含まれる同じ名前のテンプレートをレンダリングするアクションを期待しています。このコントローラーが、
テンプレートを必要としない204(コンテンツなし)で応答するAPIである場合、ブラウザーを介してアクセスしようとすると、この
ような要求に対してHTMLテンプレートがレンダリングされることが予想されるため、このエラーが発生します。その場合は続行してください。
実行環境
・windows
$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x64-mingw32]
$ rails -v
Rails 6.0.3.1
このあと、version 5.3もDLして、バージョン指定して実行したが、結果は変わらず、、
$ sqlite3 --version
3.28.0 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
原因
原因はコマンドを実行するエディタとして、Gitbash使用していたためです。
gitbashでは何故かコンパイルが実行されません。
対処法
GitbashではRailsのサーバーが立ち上がらないため、コマンドプロンプトに変えて、rails s
を実行したら、問題なくページが開けました。
コマンドプロンプトの場合、ページを指定したときに「compiling」が行われたのに対し、gitbashでは行われなかったのが原因です。
国内でもこのエラーに遭遇している人多そうなのに、情報が見つからず、海外のページでようやく見つけました。
ちなみに、ファイル名にカッコなどの記号やスペースを使っている場合も同類のエラーが出るとのことなのでご注意ください。