carrierwave,Excon :: Errors :: MovedPermanently in RegistrationsController #update error
我一直试图让carrierwave与amazon s3合作。 代替
storage :s3
我有
storage :fog
将其更改为存储:s3立即出错
https://stackoverflow.com/questions/10629827/carrierwave-cant-convert-nil-into-string-typeerror-when-using-s3
所以我把它改成了存储:像下面的rdoc所说的雾。
http://rubydoc.info/gems/carrierwave/frames
然而,当我尝试上传图像时,我得到了这个疯狂的错误。 我正在使用设计gem。
我的完整堆栈跟踪是
Excon::Errors::MovedPermanently in RegistrationsController#update Excon::Errors::MovedPermanently (Expected(200) Actual(301 Moved Permanently) request => {:connect_timeout=>60, :headers=>{"Content-Length"=>95472, "Content-Type"=>"image/jpeg", "x-amz-acl"=>"private", "Cache-Control"=>"max-age=315576000", "Date"=>"Thu, 17 May 2012 05:28:55 +0000", "Authorization"=>"AWS AKIAIN6SC3YSGBSUKV4Q:kZOG9mG01jYn48ImFMYbgxAAQRk=", "Host"=>"user.a.777.s3-eu-west-1.amazonaws.com:443"}, :instrumentor_name=>"excon", :mock=>false, :read_timeout=>60, :retry_limit=>4, :ssl_ca_file=>"/Users/sasha/.rvm/gems/ruby-1.9.3-p125/gems/excon-0.13.4/data/cacert.pem", :ssl_verify_peer=>true, :write_timeout=>60, :host=>"user.a.777.s3-eu-west-1.amazonaws.com", :path=>"/uploads%2Fuser%2Fimage%2F59%2Fidea.jpg", :port=>"443", :query=>nil, :scheme=>"https", :body=>#, :expects=>200, :idempotent=>true, :method=>"PUT"} response => #<Excon::Response:0x007fd72a146820 @body="\nPermanentRedirect
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.F5F5AF888E837622user.a.777IShK3GIthzCQysLOKXnR+ijJiHmMuUtXBOpFxQM4uCvJgkEHfmFn43LL4oWmpT82s3.amazonaws.com", @headers={"x-amz-request-id"=>"F5F5AF888E837622", "x-amz-id-2"=>"IShK3GIthzCQysLOKXnR+ijJiHmMuUtXBOpFxQM4uCvJgkEHfmFn43LL4oWmpT82", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Thu, 17 May 2012 05:29:00 GMT", "Connection"=>"close", "Server"=>"AmazonS3"}, @status=301>): app/controllers/registrations_controller.rb:30:in `update'
我不知道这甚至意味着什么。
在我的初始化器/ carrierwave.rb我有..
CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', # required :aws_access_key_id => 'somekey', # required :aws_secret_access_key => 'secretkey', # required :region => 'eu-west-1' # optional, defaults to 'us-east-1' } config.fog_directory = 'bucket.name' # required #config.fog_host = 'https://s3.amazonaws.com' # optional, defaults to nil config.fog_public = false # optional, defaults to true config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {} end
和我的上传者文件有
#storage :s3 storage :fog def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end
我的gem文件有
gem 'carrierwave' gem 'thin' gem 'fog'
当我启动我的服务器而不是webrick时,它在开发中也使用了瘦。
我的配置错了吗? 帮助将不胜感激! 我一直被困在这个载波/ s3问题上
我今天早些时候碰到了这个,这是该地区的一个问题。 只需将其取出并按默认设置即可。
CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', # required :aws_access_key_id => 'somekey', # required :aws_secret_access_key => 'secretkey' # required } config.fog_directory = 'bucket.name' # required #config.fog_host = 'https://s3.amazonaws.com' # optional, defaults to nil config.fog_public = false # optional, defaults to true config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {} end
对我来说,这个配置
config.fog_directory = 'bucket_name' config.fog_host = 'https://s3-eu-west-1.amazonaws.com/bucket_name'
我有同样的问题。
按照以下3个步骤为我工作。
1.创建存储桶时更改默认区域
2.编辑我的carrierwave.rb
文件(如下图所示)
initializers/carrierwave.rb
:
if Rails.env.production? CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => ENV['S3_ACCESS_KEY'], :aws_secret_access_key => ENV['S3_SECRET_KEY'], :region => ENV['S3_REGION'] } config.fog_directory = ENV['S3_BUCKET'] end end
3.在命令行中heroku config:set S3_REGION='your region'
heroku,如下所示: heroku config:set S3_REGION='your region'
就像@Jason Bynum所说,不要指定区域并让它默认。
如果你仍然失败,请不要担心,此时,heroku会给你提示你所your region specified is wrong and should be xxx
你知道如何填补该地区:)
以下是我的工作:
CarrierWave.configure do |config| config.fog_credentials = { provider: 'AWS', # required aws_access_key_id: ENV['S3_KEY'], # required aws_secret_access_key: ENV['S3_SECRET'], # required region: 'ap-southeast-1', # optional, defaults to 'us-east-1' } config.fog_directory = 'your_bucket_name' # required config.fog_public = false # optional, defaults to true config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } # optional, defaults to {} end
的Gemfile:
gem 'carrierwave', '0.10.0' gem 'fog', '1.36.0'