Как я могу сделать файлы процесса Paperclip из каталога сервера? - PullRequest
6 голосов
/ 27 сентября 2010

Я хочу запустить Paperclip для всех файлов в каталоге на сервере.По сути, я хотел бы разрешить пользователям передавать некоторые файлы по FTP на мой веб-сервер, затем я могу вручную запустить задачу rake, чтобы Paperclip обработал все файлы (изменил размеры изображений, обновил базу данных и т. Д.).

Как я могу это сделать?

1 Ответ

9 голосов
/ 27 сентября 2010

Я не уверен, понял ли я ваш вопрос - вы просите запустить задачу rake удаленно или как импортировать изображения?

В последнем случае есть ответ.

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

class Picture < ActiveRecord::Base
    has_attached_file :image, :styles => {
        :thumb => "100x100>",
        :big => "500x500>"
      }
end

. Вы можете создать простое задание rake в папке lib / tasks (вы должны назвать файл с расширением .rake.)

namespace :import do

  desc "import all images from SOURCE_DIR folder"
  task :images => :environment do
    # get all images from given folder
    Dir.glob(File.join(ENV["SOURCE_DIR"], "*")) do |file_path|
      # create new model for every picture found and save it to db
      open(file_path) do |f|
        pict = Picture.new(:name => File.basename(file_path),
                           :image => f)
        # a side affect of saving is that paperclip transformation will
        # happen
        pict.save!
      end


      # Move processed image somewhere else or just remove it. It is
      # necessary as there is a risk of "double import"
      #FileUtils.mv(file_path, "....")
      #FileUtils.rm(file_path)
    end
  end

end

Затем вы можете вручную вызвать задачу rake из консоли, указав параметр SOURCE_DIR, который будет папкой на сервере (это может быть реальная папка или удаленный подключенный)

rake import:images SOURCE_DIR=~/my_images/to/be/imported

Если вы планируете запускать это автоматически, я бы порекомендовал вам перейти к гему Resque Scheduler.

Обновление: для простоты я специально исключил обработку исключений

...