LoginSignup
4
2

More than 5 years have passed since last update.

Windows7環境でrspec:installする際のInvalid argument @ dir_s_mkdirの応急処置

Posted at

Ruby(Rails)を始めたばかりで手探りの状態で、ネットなどを見ながら勉強をしています。
その途中でテストフレームワークRSpecを使い方法を試している際にエラーが発生してしまいました。

Windows環境でrspec:installを実行

環境の準備などは終わっている状態で、rspec-railsをインストールした後に以下のコマンドを実行する際に、エラーが発生しました。

$ rails g rspec:install
identical  .rspec
       exist  spec
      create  spec/C:/Users/oooo/AppData/Local/Temp/~/spec/spec_helper.rb
C:/Ruby24/lib/ruby/2.4.0/fileutils.rb:252:in `mkdir': Invalid argument @ dir_s_mkdir - C:.... (Errno::EINVAL)
...

とりあえず、エラーメッセージで検索をしてみたところ、rspec-railsのissue#1555が見つかりました。そこを眺めてみると、テンポラリーディレクトリの確認等が行われていたので、自分の環境を確認してみる事にしました。

テンポラリーの場所を確認と変更

とりあえずRuby上で環境変数とテンポラリーディレクトリがどうなっているのか確認してみました。

irb(main):001:0> require 'tempfile'
=> true
irb(main):002:0> Dir.tmpdir
=> "C:/Users/oooo/AppData/Local/Temp"
irb(main):003:0> p ENV['TMPDIR']
nil
=> nil

C:/Users/oooo/AppData/Local/Temp がテンポラリのディレクトリとなっているようであり、原因まではわかりませんがここだと問題があるようです。

そこでShellに

export TMPDIR=c:/tmp

を定義して先程のコマンドを実行してみました。

irb(main):001:0> require 'tempfile'
=> true
irb(main):002:0> Dir.tmpdir
=> "C:/tmp"
irb(main):003:0> p ENV['TMPDIR']
"C:\\tmp"
=> "C:\\tmp"

テンポラリーディレクトリと環境変数が設定した値になっている事は確認できました。

rspec:installに再挑戦

テンポラリーディレクトリが切り替わったので、rspec:installをもう一度試してみる事にしました。

$ rails g rspec:install
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb

とりあえず、エラーが発生せずに処理が終わったことが確認できました。

まだRuby自体も始めたばかりなので、もっといい方法があるのかもしれませんが、今の段階ではこれで解決としました。

4
2
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
4
2