2017-04-08 169 views
1

我已经经历了所有答案,使我的视频上传到S3工作,但他们不工作。我继续得到错误未初始化的常量Paperclip :: Storage :: S3 :: Aws。上传视频Rails/S3/Paperclip

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

的Gemfile

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" 

配置\ s3.yml

AWS_ACCESS_KEY_ID: xxx 
    AWS_SECRET_ACCESS_KEY: xxx 
    S3_BUCKET_NAME: xxx 

型号\ 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 

initilizers \ paperclip.rb

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

Paperclip::Attachment.default_options.merge! paperclip_defaults 

initilizers \ 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']] 
+1

您的回形针和AWS的初始化工具的外观如何? –

+0

这是回形针 paperclip_defaults = Rails.application.config_for:paperclip paperclip_defaults.symbolize_keys! Paperclip :: 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']] –

+0

你能用回形针默认配置更新你的问题吗? – catch22

回答

0

有你试过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' 

+0

我实际上是在追查你的建议,但现在我收到这个错误 '运行命令时出错if command -v avprobe 2>/dev/null;然后回显“真实”;其他回声“假”; fi:命令'if command -v avprobe 2>/dev/null;然后回显“真实”;其他回声“假”; fi'返回1.预期0这是命令输出:STDOUT:STDERR:-v此时意外。 ' –

+0

对不起,我不熟悉这个错误。你在哪里得到它?你有这个github回购吗? – catch22

+0

是的 - https://github.com/Stepeo/Redam - 如果你能解释我发生了什么,这将是非常棒的! :) –