5
5

More than 3 years have passed since last update.

Railsチュートリアル第6版の3.3.1のテストで「ActionView::Template::Error: Permission denied」エラーが出たので解決した

Posted at

環境は何?

  • Windows10 Home ver.2004
  • ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x64-mingw32]
  • Rails 6.1.0

何が起きた?

 Railsチュートリアルのリスト3.15のrails testコマンドを実行したら、次のようなエラー①が出た。

エラー①
D:\Programming\RubyOnRails\sample_app2>rails test
Run options: --seed 42827

# Running:

E

Error:
StaticPagesControllerTest#test_should_get_home:
ActionView::Template::Error: Permission denied @ rb_file_s_rename - (D:/Programming/RubyOnRails/sample_app2/tmp/cache/assets/sprockets/v4.0.0/6p/6p5srKo-CqopTzauMxsxGBdnpUciiPghSY6oKN4-uVY.cache.15640.1380.291914, D:/Programming/RubyOnRails/sample_app2/tmp/cache/assets/sprockets/v4.0.0/6p/6p5srKo-CqopTzauMxsxGBdnpUciiPghSY6oKN4-uVY.cache)
    app/views/layouts/application.html.erb:9
    test/controllers/static_pages_controller_test.rb:5:in `block in <class:StaticPagesControllerTest>'


rails test test/controllers/static_pages_controller_test.rb:4

.

Finished in 0.148240s, 13.4916 runs/s, 6.7458 assertions/s.
2 runs, 1 assertions, 0 failures, 1 errors, 0 skips

解決方法は何?

 test_helper.rb内の該当箇所をparallelize(workers: 1)に変える。

test\test_helper.rb
class ActiveSupport::TestCase
  # Run tests in parallel with specified workers
  parallelize(workers: 1) #ここ

解決するために何をした?

1.

 エラーメッセージなどで検索して見つけた「Ruby on Rails チュートリアル Windows での実施時の困ったメモ」を参考にコマンドを試してみたが、rails assets:precompileコマンドで次のようなエラー②が出た。

エラー②
D:\Programming\RubyOnRails\sample_app2>rails assets:precompile
rails aborted!
Errno::ENOEXEC: Exec format error - D:/Programming/RubyOnRails/sample_app2/bin/yarn --version

Tasks: TOP => assets:precompile => yarn:install
(See full trace by running task with --trace)

 rails yarn:installコマンドを実行してみたり、ある程度長い時間調べてみたりしたが自分の手には負えなさそうなので、このエラー②を解決するのはとりあえず諦めることにした。(bin/yarnでコマンドを実行しようとしていることが原因……?)

2.

 Permission deniedなんだからアクセス権を付与してやればいいんだろうと思って、エクスプローラーからtmpフォルダ以下に対して全ユーザー(グループ)にフルコントロールを許可したが、それでもエラー①は直らなかった。

3.

 上と同様、アクセス権の問題ならコマンドを管理者権限で実行すればどうかと思い、「Ruby 管理者として実行」などのキーワードで検索して見つけた「Rubyでgem installしたときにpermission deniedが出現した時の解決法」を参考に、Rubyコマンドプロンプトを管理者として実行してrails testコマンドを打ってみたが、エラー①は直らなかった。

4.

 2つのtestの内、片方(should get help)はassertionsとなっていることに気付き、static_pages_controller_test.rb内のshould get helpをコメントアウトしてshould get homeだけをテストしてみるとエラーは出なかった。つまり、2つのtestを同時に行うときにだけエラーが出ているということに気付く。
 1.で色々調べているときに、Railsのテストはデフォルトだとテスト時間短縮のために並列で行われるというような記述を見かけたことを思い出し、「Rails テスト 並列」などのキーワードで検索して「Rails テスティングガイド」を見つけた。ここの3.1を参考に、test_helper.rb内の該当箇所をparallelize(workers: 1)に変えたら、エラー①は出なくなった。

以上

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5