I want to write something to a file.
# 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
When this code is executed, I'm getting this error. I know this folder doesn't exist, but File.open
with w
mode creates a new file if it doesn't exist.
Why is this not working?
Trying to use gets
inside a rake task? You may be seeing this error message:
Errno::ENOENT: No such file or directory @ rb_sysopen
Did you try searching the error, and end up on this page? This answer is not for the OP, but for you.
Use STDIN.gets
. Problem solved. That's because just using gets
resolves back to $stdin.gets
and rake is overriding the global variable so that gets
tries to open a file handle that doesn't exist. Here's why:
What's the difference between gets.chomp() vs. STDIN.gets.chomp()?
File.open(..., 'w')
creates a file if it does not exist. Nobody promised it will create a directory tree for it.
Another thing, one should use File#join
to build directory path, rather than dumb string concatenation.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With