2015-09-02 4 views
1

У меня есть скрипт, который работает один раз в неделю и создает файл CSV. Ссылка для загрузки отправляется по электронной почте, поэтому пользователи могут загрузить файл. Я в настоящее время храню файл в /tmp/. Иногда это работает, но некоторые пользователи получают сообщение об ошибке и журналы показываютЛучшее место для загрузки файлов для скачивания

ActionController::MissingFile occurred in csv_downloads#download: 
Cannot read file tmp/filename.csv 

Что является лучшим способом хранения этих файлов? Вот часть текущего скрипта

csv_string = CSV.generate(write_headers: true, headers: HEADER) { |csv| write_data(csv) } 
    file = File.new(File.join(Dir.pwd, "/tmp/#{@file_name}.csv"), "w+") 
    file.write(csv_string) 
    file.close 
    file 
+0

Одна из проблем заключается в том, что похоже, что вы сохраняете в '/ tmp', а затем пытаетесь получить доступ к' tmp' (без /), который будет '<путь к вашему rails app>/tmp' –

+0

@MaxWilliams Я думал, что это может быть изначально, но он работает для некоторых пользователей, и он работает при тестировании. Я думаю, что проблема с tmp/будет очищена до того, как пользователи смогут получить доступ к файлу. –

ответ

3

Если файлы являются публичными, почему бы не хранить их в "#{Rails.root}/public/csv-files/#{@file_name}.csv". Если public не является вариантом, поместите их в безопасное место. Не в /tmp, где они могут быть удалены системой.

/tmp dir регулярно очищается системой. Прочтите эту дискуссию для получения дополнительной информации. https://askubuntu.com/questions/20783/how-is-the-tmp-directory-cleaned-up

+0

мой контроллер ограничивает доступ пользователей к файлу. Было бы лучше всего создать каталог/downloads и поместить туда файлы? Я также задал вопрос, чтобы лучше понять, как работает tmp /. Что очищает эту папку? Когда он очищается? Когда я что-то там положил, как долго я могу ожидать, что он останется там? –

Смежные вопросы