Techioz Blog

Ruby: そのようなファイルまたはディレクトリはありません @ rb_sysopen - testfile (Errno::ENOENT)

概要

ファイルに何かを書き込みたい。

# where userid is any intger [sic]
path = Rails.root + "public/system/users/#{user.id}/style/img.jpg" 
File.open(path, 'wb') do |file|
  file.puts f.read
end 

このコードを実行すると、このエラーが発生します。このフォルダーが存在しないことはわかっていますが、ファイルが存在しない場合、w モードで File.open を実行すると新しいファイルが作成されます。

これが機能しないのはなぜですか?

解決策

rakeタスク内でgetsを使用しようとしていますか?次のエラー メッセージが表示される場合があります。

エラーを検索してこのページにたどり着きましたか?この答えはOPのためのものではなく、あなたのためのものです。

STDIN.gets を使用します。問題が解決しました。これは、gets を使用するだけでは .gets に解決され、rake はグローバル変数をオーバーライドするため、gets は存在しないファイル ハンドルを開こうとします。その理由は次のとおりです。

gets.chomp() と STDIN.gets.chomp() の違いは何ですか?