carrierwave Excon :: Errors :: SocketError

时间:2014-07-30 05:52:32

标签: ruby-on-rails heroku carrierwave null

我已经阅读了与此相关的几个帖子和解决方案,但我仍然无法弄明白并仍然返回 " 在/ posts的Excon :: Errors :: SocketError getaddrinfo:提供nodename或servname,或者不知道(SocketError)"

这是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

来自帖子控制器

 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
安装了carrierwave-aws后,

更新了config / carrierwave.rb

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
更改为存储后

: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.

2 个答案:

答案 0 :(得分:3)

这可能是因为fog的实现,或许尝试将您的gem切换到carrierwave-aws,看看它是否解决了您的问题:)

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

我记得有类似的错误,更改后,工作正常!

答案 1 :(得分:0)

我遇到了同样的问题并切换到了carrierwave-aws工作,我也没有在S3中为我的用户附加策略,所以请检查是否仍然无法正常工作。