2014-05-14 66 views
1

我正在升級舊的rails應用程序並升級Paperclip。我有一個使用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 

威爾Paperclip.run()返回一個可卡因:: ExitStatusError是否有問題?或者,因爲我只是使用Paperclip.run()作爲包裝來運行我的命令,我應該使用Cocaine :: CommandLine嗎?感謝您的見解。

回答

2

對於現在使用的命令,現在使用cocaine的Paperclip是正確的。然而,呼叫使用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

不用擔心。樂於幫助。 –