Какие столбцы базы данных необходимы для загрузки видео в rails-Carrierwave, Fog & S3


Я хотел бы, чтобы пользователи могли загружать видео на мой сайт rails с помощью carrierwave, fog и Amazon S3. (Я еще не пробовал реализовать 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
1 2

1 ответ:

Не забудьте поставить storage :fog

В противном случае в модели вам понадобится только строковый столбец video для хранения URL-адреса S3. 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