carrierwave Excon :: Errors :: SocketError

我已经阅读了几篇与此相关的post和​​解决方案,但我仍然无法理解它仍然会返回“Excon :: Errors :: SocketError at / posts 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  [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 (eg 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. 

这可能是因为fog的实现,也许尝试将你的gem切换到carrierwave-aws ,看看它是否修复了你的问题:)

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

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

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