2014-05-14 2 views
1

Я нахожусь в процессе обновления старого приложения рельсов и обновляю скрепку. У меня есть пользовательский процессор, который использует Paperclip.run для запуска некоторых инструкций преобразования вручную в моем процессоре. Иногда плохой файл проскальзывает, что imagemagick не нравится, поэтому мы поймаем ошибку и ответим пользователю.Как поймать ошибку Paperclip.run (cmd)

старый путь был следующим (Этот код не получится):

begin 
    Paperclip.run("convert", cmd) 
rescue PaperclipCommandLineError 
    raise PaperclipError, "There was an error processing the tiles for #{@basename}" if whiny 
end 

Который используется, чтобы поймать ошибку команды и поднять ошибку проверки. Это больше не работает, потому что больше нет PaperclipCommandLineError.

Рассматривая код, похоже, что Paperclip.run() использует https://github.com/thoughtbot/cocaine для обработки его команд. Глядя на документации кокаина это выглядит, как мы могли бы поймать код завершения и восстановить таким образом что-то вроде:

begin 
    Cocaine::CommandLine.new("convert", cmd) 
rescue Cocaine::ExitStatusError => e 
    #error handling here 
end 

Will Paperclip.run() возвращает Кокаин :: ExitStatusError, если есть проблема? Или, поскольку я просто использую Paperclip.run() в качестве оболочки для выполнения моей команды, должен ли я использовать Cocaine :: CommandLine вместо этого? Спасибо за ваше понимание.

ответ

2

Вы теперь правы с помощью Paperclip, используя cocaine для команд. Однако вызов использовать cocaine является внутренним, поэтому вы все равно можете использовать Paperclip.run.

Аргументы run немного отличаются:

def run(cmd, arguments = "", interpolation_values = {}, local_options = {}) 

так что вам, возможно, придется работать на вашем cmd немного, чтобы получить его в правильном формате. Вы можете видеть примеры в источнике, но там, где он вызывает вызовы file и различные функции ImageMagick.

Вы должны быть в состоянии улавливать вашу ошибку:

begin 
    Paperclip.run(cmd) 
rescue ArgumentError, Cocaine::CommandLineError 
    raise Paperclip::Error.new("There was an error processing the tiles for #{@basename}") if @whiny 
end 

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

+1

Удивительный, именно то, что мне нужно. Спасибо. –

+0

Не беспокойтесь. Рад был помочь. –

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