【问题标题】:Uploading videos Rails/S3/Paperclip上传视频 Rails/S3/Paperclip
【发布时间】:2017-09-03 19:57:18
【问题描述】:

我已经完成了所有答案,以使我的视频上传到 S3 工作,但它们不起作用。我不断收到错误未初始化常量 Paperclip::Storage::S3::Aws。

我希望你能帮我解决这个问题。

宝石文件

gem 'simple_form', '~> 3.4'
gem 'haml', '~> 4.0', '>= 4.0.7'
gem 'coffee-script-source', '1.8.0'
gem 'bootstrap-sass', '~> 3.3', '>= 3.3.7'
gem 'paperclip'
gem 'carrierwave'
gem "paperclip-ffmpeg", "~> 1.0.1"
gem 'paperclip-av-transcoder'
gem 'aws-sdk', '~> 1.6'
gem "figaro"

config\s3.yml

 AWS_ACCESS_KEY_ID: xxx
    AWS_SECRET_ACCESS_KEY: xxx
    S3_BUCKET_NAME: xxx

models\video.rb

    class Video < ApplicationRecord

            has_attached_file :clip, styles: {
                        medium: {
                                  :geometry => "640x480",
                                  :format => 'mp4'
                        },
                        thumb: { :geometry => "160x120", 
                                    :format => 'jpeg', 
                                    :time => 10}
                         }, 

                         processors: [:transcoder],

                           :storage => :s3,
                           :s3_credentials => "#{Rails.root}/config/s3.yml"


            validates_attachment :clip,
                     content_type: { content_type: ['application/x-shockwave-flash', 'application/x-shockwave-flash', 'application/flv', 'video/x-flv']}


            before_post_process :skip_for_audio

            def skip_for_audio
                ! %w(audio/ogg application/ogg).include?(asset_content_type)
            end

            before_post_process :image?
            def image?
              !(data_content_type =~ /^image.*/).nil?
            end
end

Videos_controller.rb

class VideosController < ApplicationController


      def index
        @videos = Video.all
        @video = Video.order('created_at')
      end

      def new
         @video = Video.new
      end


      def create
        @video = Video.new(videos_params)
        if @video.save
          flash[:success] = "The step was added!"
          redirect_to root_path
        else
          render 'New'
        end

        end 

        def destroy
            @video = Video.find(params[:id])
            @video.destroy
            flash[:success] = "The step was destroyed."
            redirect_to root_path
        end

        private

        def videos_params
            params.require(:video).permit(:title, :description, :clip)
        end




    end

初始化程序\paperclip.rb

paperclip_defaults = Rails.application.config_for :paperclip
paperclip_defaults.symbolize_keys!

Paperclip::Attachment.default_options.merge! paperclip_defaults

初始化程序\aws.rb

AWS.config(
  :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
  :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
)

S3_BUCKET =  AWS::S3.new.buckets[ENV['S3_BUCKET']]

【问题讨论】:

  • 你的回形针和 AWS 的初始化器是什么样子的?
  • 这是回形针 paperclip_defaults = Rails.application.config_for :paperclip paperclip_defaults.symbolize_keys 的那个!回形针::Attachment.default_options.merge! paperclip_defaults 而这是 aws AWS.config( :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] ) S3_BUCKET = AWS::S3.new.buckets[ENV['S3_BUCKET' ]]
  • 你能用回形针默认配置更新你的问题吗?
  • 我刚刚更新了两个initilizers + key和bucket的问题都存储在s3.yml中
  • 我很确定这与您的 aws-sdk gem 版本有关。试试这个gem 'aws-sdk', '&lt; 2.0'

标签: ruby-on-rails ruby amazon-web-services amazon-s3 paperclip


【解决方案1】:

你试过this configuration吗?

# config/environments/production.rb
config.paperclip_defaults = {
  storage: :s3,
  s3_credentials: {
    bucket: ENV.fetch('S3_BUCKET_NAME'),
    access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
    secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
    s3_region: ENV.fetch('AWS_REGION'),
  }
}

.

# config/initializers/paperclip.rb
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com'

.

【讨论】:

  • 我实际上是在听从你的建议,但现在我在运行命令时收到此错误'error if command -v avprobe 2>/dev/null;然后回显“真”;否则回显“假”; fi: 命令'如果命令 -v avprobe 2>/dev/null;然后回显“真”;否则回显“假”; fi' 返回 1。预期为 0 以下是命令输出: STDOUT: STDERR: -v 此时是意外的。 '
  • 对不起,我根本不熟悉这个错误。你从哪里得到它?你有这个 github repo 吗?
  • 是的 - github.com/Stepeo/Redam - 如果你能解释一下发生了什么,那就太好了! :)
  • 我已经克隆了 repo。您遇到的错误是:Av::UnableToDetect (Unable to detect any supported library): /// You need to install ffmpeg.为此,请从以下位置安装自制软件:brew.sh 并在您的终端 1 中运行它们。 brew link yasm 2. brew install ffmpeg /// 视频现在已转码,但会引发缺少的新模板。祝你好运! ;)
  • 我不是在 Mac 上运行,而是在 windows 上运行,所以我下载了 scoop 并安装了 ffmpeg,但错误仍然出现。也许你有其他我没有的设置
猜你喜欢
  • 2015-10-29
  • 2012-09-23
  • 2014-01-18
  • 2012-02-22
  • 2014-10-23
  • 2015-12-15
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多