简体   繁体   中英

Rails File I/O: What works in Ruby doesn't work in Rails?

So, I wrote a simple Ruby class, and put it in my rails /lib directory. This class has the following method:

def Image.make_specific_image(paths, newfilename)
  puts "making specific image"
  @new_image = File.open(newfilename, "w")
  puts @new_image.inspect
  @@blank.each(">") do |line|
    puts line + "~~~~~"
    @new_image.puts line
    if line =~ /<g/
      paths.each do |p|
        puts "adding a path"
        puts p
        @new_image.puts p
      end
    end
  end    
end

Which creates a new file, and copies a hardcoded string ( @@blank ) to this file, adding custom content at a certain location (after ag tag is found).

If I run this code from ruby, everything is just peachy.

HOWEVER, if I run this code from rails, the file gets CREATED, but is then empty. I've inspected each line of the code: nothing I'm trying to write to the file is nil, but the file is empty nonetheless.

I'm really stumped here. Is it a permissions thing? If so, why on EARTH would Rails have the permissions necessary to MAKE a file, but then not WRITE to the file it made?

Does File I/O somehow work differently in rails?

Specifically, I have a model method that calls:

Image.make_specific_image(paths, creature.id.to_s + ".svg")

which succesfully makes a file of the type "47.svg" that is empty.

Have you tried calling close on the file after you're done writing it? (You could also use the block-based File.open syntax, which will automatically close once the block is complete). I'm guessing the problem is that the writes aren't getting flushed to disk.

So.

Apparently File I/0 DOES work in Rails...just very, very slowly. In Ruby, as soon as I go to look at the file, it's there, it works, everything is spiffy.

Before, after seeing blank files from Rails, I would get frustrated, then delete the file, and change some code and try again (so as not to be full of spam, since each file is genearted on creature creation, so I would soon end up with a lot of files like "47.svg" and "48.svg", etc.

....So. I took my lunch break, came back to see if I could tell if the permissions of the rails generated file were different from the ruby generated file...and noticed that the RAILS file is no longer blank.

Seems to take about five minutes for rails to finally write to the file, even AFTER it claims it's done processing that whole call. Ruby takes a few seconds. Not really sure WHY they are so different, but at least now I know it's not a permissions thing.

Edit: Actually, on some files take so long, others are instant...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM