как скачать сгенерированный файл .csv в многосерверной среде - PullRequest
1 голос
/ 05 марта 2011

У меня есть задание, которое создает файлы .csv и сохраняет их в каталоге с именем export в корне rails.У меня также есть контроллер, который загружает файлы следующим образом:

def download_export
  @export = Export.find(params[:id])

  export_file = "#{RAILS_ROOT}/exports/#{@export.name.gsub(/\s/,'_')}_#{@export.id}.csv"

  if File.exists?(export_file)
    options = {:filename => "Export (#{@export.name.gsub(/\s/,'_')}_#{@export.id}).csv", :type => "text/csv"}
    options = options.merge({:x_send_file => true}) if Rails.env != "development"
    send_file export_file, options
  else
    flash[:notice] = "<h3>Export data is not available.</h3>"
    redirect_to :action => "index"
  end
end

В основном все работает, как ожидается, при работе на одном сервере.Производственная среда была масштабирована до двух серверов за балансировщиком.Существует ночная задача, которая проверяет, есть ли какие-либо экспорты в очереди, и если это так, генерирует файл.Эта задача всегда выполняется только в одном экземпляре.

Мой лучший выбор - создать символическую ссылку с другого сервера на каталог, в котором сохранен файл?Любые идеи будут оценены.

Ответы [ 2 ]

0 голосов
/ 05 марта 2011

Очень часто в средах с несколькими хостами необходимо синхронизировать вещи.Почему бы не использовать rsync, который предназначен для этой цели, или rcp или scp , которые не так умны, но в равной степени способны перемещать файлывокруг?

Вы можете сделать это двумя различными способами: пересылка с исходного хоста на вторичные хосты, или, чтобы вторичные хосты пошли за данными.

Лично я бы, вероятно, пошел с первымсценарий.Настройте задание cron, которое запускает сценарий оболочки, который проверяет, готовы ли файлы для отправки.Если это так, rsync (или scp / rcp) их перезаписывают, и, если отправка прошла успешно, удалите их из исходного каталога.

На вторичных хостах есть задание cron, которое периодически запускается при поиске файловимпортировать.Если нет файлов, немедленно завершите работу.Если они есть во входящем каталоге, загрузите их, удалите и выйдите.

Ссылка на статью rsync, на которую есть ссылки, содержит несколько примеров, которые могут помочь вам начать работу.

0 голосов
/ 05 марта 2011

Что если часть процесса, который генерирует экспорт csv, также rsyncs каталог с другим сервером?Избыточность может быть полезна, если другой сервер не работает ...

Как синхронизировать каталоги с Rsync

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...