我已经阅读了与此相关的几个帖子和解决方案,但我仍然无法弄明白并仍然返回 " 在/ 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.
答案 0 :(得分:3)
这可能是因为fog
的实现,或许尝试将您的gem切换到carrierwave-aws
,看看它是否解决了您的问题:)
https://github.com/sorentwo/carrierwave-aws
我记得有类似的错误,更改后,工作正常!
答案 1 :(得分:0)
我遇到了同样的问题并切换到了carrierwave-aws工作,我也没有在S3中为我的用户附加策略,所以请检查是否仍然无法正常工作。