Какие столбцы базы данных необходимы для загрузки видео в 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 ответ:
Не забудьте поставить
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