s3_direct_upload is not working in production server

amazon-s3, amazon-web-services, paperclip, ruby, ruby-on-rails

Solution

I had the same problem and I solve it adding the file config.yml with my S3 credentials:

RailsApp/config.yml

  # Fill in your AWS Access Key ID and Secret Access Key
  # http://aws.amazon.com/security-credentials
  access_key_id: xxxxxx
  secret_access_key: xxxxxxx

More info: https://docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/ruby-dg-setup.html

Problem

In Rails 4.0.2, I am using `s3_direct_upload` and `aws-sdk` gems for file uploads for s3 bucket directly. In development environment it is working fine but in production environment it is throwing an error like below, ``` ActionView::Template::Error (no implicit conversion of nil into String) ``` In views, ``` <%= s3_uploader_form :callback_url=>create_cv_url, :id=> "s3_uploader", :key=> "cv_uploads/{unique_id}/${filename}", :key_starts_with=> "cv_uploads/", :callback_param=> "cv[direct_upload_url]", :max_file_size=> 1.megabytes, :expiration=> 24.hours.from_now.utc.iso8601 do %> <%= file_field_tag :file, multiple: true, :max_file_size => 1.megabytes, accept: 'application/pdf application/msword application/rtf application/doc application/docx' %> <% end %> <script id="template-upload" type="text/x-tmpl"> <div id="upload_{%=o.unique_id%}" class="upload"> <h5 class="mt1">Please Wait. <span style="color: #5f6fa0;"> {%=o.name%} </span>is processing...</h5> <div class="progress"><div class="progress-bar progress-bar-striped active" style="width: 0%;"></div></div> </div> ``` Here, the issue is mainly pointing to `s3_uploader_form` line(in views). This feature is fully referred from http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and In paperclip.rb ``` Paperclip::Attachment.default_options.merge!( url: :s3_domain_url, path: ':class/:attachment/:id/:style/:filename', storage: :s3, s3_credentials: Rails.configuration.aws, s3_permissions: :private, s3_protocol: 'http' ) require 'paperclip/media_type_spoof_detector' module Paperclip class MediaTypeSpoofDetector def spoofed? false end end end ``` In aws.rb ``` require 'aws-sdk' # Rails.configuration.aws is used by AWS, Paperclip, and S3DirectUpload Rails.configuration.aws = YAML.load(ERB.new(File.read("# {Rails.root}/config/aws.yml")).result)[Rails.env].symbolize_keys! AWS.config(:logger=> Rails.logger) AWS.config(Rails.configuration.aws) ``` In s3_direct_upload.rb ``` S3DirectUpload.config do |c| c.access_key_id = Rails.configuration.aws[:access_key_id] c.secret_access_key = Rails.configuration.aws[:secret_access_key] c.bucket = Rails.configuration.aws[:bucket] c.region = "s3" end ``` Is it because of configuration issue in production environment? Please help me to solve this issue.

Original source