2

我希望用户能够使用carrierwave、fog 和Amazon S3 将视频上传到我的rails 站点。(我还没有尝试实现 S3 进行存储,也不是这个问题的主题。)

我的视频模型和模型保存代码需要哪些数据库列才能使用 Carrierwave 成功保存视频文件?

目前我的视频表有以下内容,但我对我真正需要的内容感到困惑。

 class CreateVideoTable < ActiveRecord::Migration

  def up
    create_table :videos do |t|
      t.string :video
      t.integer :user_id
      t.integer :question_id
      t.string :youtube_url
      t.string :type
      t.string :filename
      t.string :checksum
      t.string :path
      t.integer :filesize
      t.integer :width
      t.integer :height
      t.integer :duration
      t.integer :bit_rate

      t.timestamps
    end
      add_index :videos, [:user_id, :question_id]
  end

  def down
    remove_index :videos, [:user_id, :question_id]
    drop_table :videos
  end
end

这是我的视频模型的外观:

class Video < ActiveRecord::Base

  attr_accessor :user_id, :question_id, :video, :youtube_url, :type, :filename, :checksum, :path, :filesize, :width, :height, :duration, :bit_rate

  belongs_to :question
  belongs_to :user

  mount_uploader :video, VideoUploader
end

最后是我的carrierwave上传器。

class VideoUploader < CarrierWave::Uploader::Base

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_white_list
    %w(ogg ogv 3gp mp4 m4v webm mov m2v 3g2)
    # %w(ogg ogv 3gp mp4 m4v webm mov)
  end
end
4

1 回答 1

3

别忘了放storage :fog

否则,在模型中,您只需要一个字符串列video来存储 S3 URL。Carrierwave/fog 将负责其余的工作。如果需要,您当然可以添加更多与您的应用程序相关的列。换句话说,你很高兴:)

另外,初始化程序丢失了,不知道您是否忘记了:

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',                        # required
    :aws_access_key_id      => 'xxx',                        # required
    :aws_secret_access_key  => 'yyy',                        # required
    :region                 => 'eu-west-1',                  # optional, defaults to 'us-east-1'
    :host                   => 's3.example.com',             # optional, defaults to nil
    :endpoint               => 'https://s3.example.com:8080' # optional, defaults to nil
  }
  config.fog_directory  = 'name_of_directory'                     # required
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end
于 2013-04-16T01:57:46.313 回答