7

私はcarrierwaveを使用してビデオをアップロードしてから、ビデオを取得し、streamio-ffmpegを使用してスクリーンショットを作成するカスタムプロセッサを備えたthumbというバージョンを使用しています。ビデオとファイルの両方が正しくアップロードされますが、uploader.url(:thumb)を呼び出すと次のようになります。

ArgumentError:バージョンサムが存在しません!

VideoUploader.rb

require 'carrierwave/processing/mime_types'
require 'streamio-ffmpeg'

class VideoUploader < CarrierWave::Uploader::Base
    include CarrierWave::VideoConverter
    include CarrierWave::MimeTypes

    process :set_content_type

    storage :file

    version :thumb do
            process :create_thumb

            #def full_filename(for_file)
            #        "thumb_#{File.basename(for_file, File.extname(for_file))}.png"
            #end
    end

    def create_thumb
            cached_stored_file! if !cached?

            movie = FFMPEG::Movie.new(current_path)

            dirname = File.dirname(current_path)

            thumb_path = "#{File.join(dirname, File.basename(path, File.extname(path)))}.png"

            movie.screenshot(thumb_path, :seek_time => 5)
            File.rename thumb_path, current_path
    end

    def file_identifier
            model[:video]
    end

    # Override the directory where uploaded files will be stored.
    # This is a sensible default for uploaders that are meant to be mounted:
    def store_dir
            return "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.user_id}/#{model.id}"
    end
end

次に、model.video_url(:thumb)は引数エラーを返します。どうすればいいのか、なぜバージョンが登録されていないのかわからないので、助けていただければ幸いです。

4

2 に答える 2

1

修理

エラーの原因は、サーバーの再起動とRailsコンソールの再起動の組み合わせでした。これを実行すると、引数エラーはなくなりましたが、間違ったパスを取得していました。だから私はコメントを外した

        def full_filename(for_file)
                "thumb_#{File.basename(for_file, File.extname(for_file))}.png"
        end

使用済み

[model].video.recreate_versions!

発生した可能性のあるパスまたは命名スキームのエラーを修正する

于 2012-11-05T00:38:22.033 に答える
0

create_thumbメソッドの一部のステップが失敗している可能性が高いため、thumbは作成されず、URLもありません。ログにスローされる例外はありますか?

おそらく、FFMPEGバイナリの場所を指定する必要があります。

FFMPEG.ffmpeg_binary = '/usr/local/bin/ffmpeg'
于 2012-11-03T00:29:08.660 に答える