ファイルに何かを書きたい。
# 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
このコードを実行すると、このエラーが発生します。このフォルダが存在しないことは知っていますが、File.open
with w
モードは、新しいファイルが存在しない場合に作成します。
なぜこれが機能しないのですか?
File.open(..., 'w')
は、ファイルが存在しない場合にファイルを作成します。ディレクトリツリーを作成すると約束した人はいませんでした。
もう1つ、 File#join
単純な文字列連結ではなく、ディレクトリパスを構築します。
path = File.join Rails.root, 'public', 'system', 'users', user.id.to_s, 'style'
FileUtils.mkdir_p(path) unless File.exist?(path)
File.open(File.join(path, 'img.jpg'), 'wb') do |file|
file.puts f.read
end
レーキタスク内でgets
を使用しようとしていますか?次のエラーメッセージが表示される場合があります。
Errno :: ENOENT:そのようなファイルまたはディレクトリはありません@ rb_sysopen
エラーを検索してみましたが、このページで終わりましたか?この答えはOPのためではなく、あなたのためです。
STDIN.gets
を使用します。問題が解決しました。単にgets
を使用すると$stdin.gets
に戻り、rakeはグローバル変数をオーバーライドして、gets
が存在しないファイルハンドルを開こうとするためです。その理由は次のとおりです。