Rails File I / O: что работает в Ruby, не работает в Rails? - PullRequest
1 голос
/ 25 июня 2010

Итак, я написал простой класс Ruby и поместил его в мой каталог rails / lib. Этот класс имеет следующий метод:

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

, который создает новый файл и копирует жестко закодированную строку (@@blank) в этот файл, добавляя пользовательский контент в определенном месте (после обнаружения тега g).

Если я запускаю этот код из ruby, все просто замечательно.

ОДНАКО, если я запускаю этот код с рельсов, файл создается, но затем становится пустым. Я проверил каждую строку кода: все, что я пытаюсь записать в файл, равно nil, но, тем не менее, файл пуст.

Я действительно в тупике. Это проблема с разрешениями? Если это так, то почему в EARTH у Rails будут права, необходимые для создания файла, но не для записи в файл, который он создал?

Файловый ввод-вывод работает как-то иначе в рельсах?

В частности, у меня есть метод модели, который вызывает:

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

, который успешно создает пустой файл типа "47.svg".

Ответы [ 2 ]

3 голосов
/ 25 июня 2010

Вы пытались вызвать закрыть для файла после того, как закончили его запись?(Вы также можете использовать блочный синтаксис File.open, который автоматически закроется после завершения блока).Я предполагаю, что проблема в том, что записи не сбрасываются на диск.

0 голосов
/ 25 июня 2010

Итак.

Видимо File I / 0 работает в Rails ... просто очень, очень медленно.В Ruby, как только я посмотрю на файл, он там, он работает, все отлично.

Раньше, после просмотра пустых файлов из Rails, я расстраивался, затем удалял файл иизмените некоторый код и попробуйте еще раз (чтобы не было спама, поскольку каждый файл создается при создании существа, поэтому я скоро получу множество файлов, таких как «47.svg» и «48.svg» и т. д.)..

.... Итак. Я взял свой обеденный перерыв, вернулся, чтобы посмотреть, могу ли я сказать, отличаются ли разрешения для файла, созданного с помощью rails, от файла, сгенерированного ruby ​​... и заметил, что RAILSфайл больше не является пустым.

Кажется, что рельсам понадобится около пяти минут для окончательной записи в файл, даже ПОСЛЕ того, как он заявляет, что завершил обработку всего этого вызова. Ruby занимает несколько секунд.такие разные, но, по крайней мере, теперь я знаю, что это не проблема с правами доступа.

Редактировать: На самом деле, некоторые файлы занимают так много времени, другие - мгновенно ...

...