capistrano3のupload!で『Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8』エラー

capistranoのタスクでディレクトリ内のファイルをリモートに上げる処理を↓のように書いていたところ

# lib/capistrano/tasks/uploads.rake

namespace :uploads do
  task :wpuploads do
    ask(:upload_path, nil)
    on roles(:web) do
      upload!('wp-content/uploads/', "/var/www/html/app_name/shared/wp-content/uploads/", via: :scp, recursive: true)
    end
  end
end

しばらくは順調に進んでいたのですが、一部の日本語ファイルをアップロードしようとした時このようなエラーが出てしまいました。

(Backtrace restricted to imported tasks)
cap aborted!
Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8
/Users/user_name/chef/app_name/lib/capistrano/tasks/uploads.rake:18:in `block (3 levels) in '
Tasks: TOP => uploads:wpuploads
(See full trace by running task with --trace)

net-scpで起きるエラーのようで、下記のようにforce_encodingを追加したら問題なく進むようになりました。

# lib/capistrano/tasks/uploads.rake

module Net
  module SSH
    class Buffer
      def write(*data_list)
        data_list.each do |data|
          @content << data.dup.force_encoding('ASCII-8BIT')
        end
        self
      end
    end
  end
end

namespace :uploads do
  task :wpuploads do
    ask(:upload_path, nil)
    on roles(:web) do
      upload!('wp-content/uploads/', "/var/www/html/app_name/shared/wp-content/uploads/", via: :scp, recursive: true)
    end
  end
end

書く場所はもう少し工夫する必要がありそうです。