user1944672
user1944672

Reputation: 87

carrierwave Excon::Errors::SocketError

I have read several posts and solutions related to this, but I still cannot figure it out and still returns " Excon::Errors::SocketError at /posts getaddrinfo: nodename nor servname provided, or not known (SocketError)"

this is config/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',                        # required
    :aws_access_key_id      => '----',                        # required
    :aws_secret_access_key  => '----',                        # 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 {}
   config.asset_host     = 'https://assets.example.com'   
 end

avatar_upload.rb

 # encoding: utf-8

  class AvatarUploader < CarrierWave::Uploader::Base

    include CarrierWave::MiniMagick

    storage :fog
    process :resize_to_fit => [900,500]

   version :thumb do
      process :resize_to_fill => [200,200]
     end

   def cache_dir
      "#{Rails.root}/tmp/uploads"
    end

   def store_dir
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
   end
    def default_url
      #   # For Rails 3.1+ asset pipeline compatibility:
      #   # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
     #
        "/images/fallback/" + [version_name, "default.png"].compact.join('_')
    end

    def extension_white_list
      %w(jpg jpeg gif png)
    end
  end

from post controller

 def create
   @post = Post.new(post_params)
   @post.user = current_user

    unless current_user.admin?
     unless current_user.manager?
       redirect_to :back, :alert => "acces denied"
     end
    end

    respond_to do |format|
     if @post.save
        params[:photo_attachments]['avatar'].each do |a|
         @photo_attachment = @post.photo_attachments.create!(:avatar => a, :post_id =>@post.id)
        end
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
         format.json { render :show, status: :created, location: @post }
        else
         format.html { render :new }
         format.json { render json: @post.errors, status: :unprocessable_entity }
      end
     end
    end

updated config/carrierwave.rb after installing carrierwave-aws

CarrierWave.configure do |config|
   config.storage    = :aws
   config.aws_bucket = ENV['S3_BUCKET_NAME']
   config.aws_acl    = :public_read
   config.asset_host = 'http://example.com'
   config.aws_authenticated_url_expiration = 60 * 60 * 24 * 365

  config.aws_credentials = {
    access_key_id:     ENV['---'],
    secret_access_key: ENV['---']
  }
end

after changing to storage :aws

AWS::Errors::MissingCredentialsError

Missing Credentials.

Unable to find AWS credentials.  You can configure your AWS credentials
a few different ways:

* Call AWS.config with :access_key_id and :secret_access_key

* Export AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to ENV

* On EC2 you can run instances with an IAM instance profile and credentials
  will be auto loaded from the instance metadata service on those
  instances.

 * Call AWS.config with :credential_provider.  A credential provider should
  either include AWS::Core::CredentialProviders::Provider or respond to
  the same public methods.

 = Ruby on Rails

   In a Ruby on Rails application you may also specify your credentials in
  the following ways:

   * Via a config initializer script using any of the methods mentioned above
    (e.g. RAILS_ROOT/config/initializers/aws-sdk.rb).

   * Via a yaml configuration file located at RAILS_ROOT/config/aws.yml.
    This file should be formated like the default RAILS_ROOT/config/database.yml
    file.

Upvotes: 3

Views: 5219

Answers (2)

Jonny
Jonny

Reputation: 461

I had the same issue and switching to carrierwave-aws worked, I also hadn't attached a policy to my user in S3 so check that if still not working.

Upvotes: 0

derekyau
derekyau

Reputation: 2946

This is possibly because of an implementation with fog, perhaps try switching your gem to carrierwave-aws and see if it fixes your problems :)

https://github.com/sorentwo/carrierwave-aws

I remember having a similar error and after changing, works fine!

Upvotes: 4

Related Questions