Rails Carrierwave和JQuery上传到Amazon S3

时间:2011-12-15 02:04:05

标签: ruby-on-rails jquery amazon-s3 amazon carrierwave

我正在尝试将多次上传实施到Amazon S3 https://github.com/jnicklas/carrierwave/blob/master/README.md(在使用Amazon S3下)

但我在日志文件中遇到错误:

Started POST "/images?project_id=18" for 124.106.90.29 at Wed Dec 14 19:11:47 -0600 2011
  Processing by ImagesController#create as JS
  Parameters: {"project_id"=>"18", "authenticity_token"=>"9z0CzTtMwxgfdsyFLCNzx44qqRDT8F7+6F/RsVzUe4=", "utf8"=>"✓", "image"=>{"carimage"=>#<ActionDispatch::Http::UploadedFile:0x6eab8de86708 @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"image[carimage]\"; filename=\"stroke_holding.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/tmp/RackMultipart20111214-5354-1b4qtl7-0>, @original_filename="stroke_holding.jpg">, "project_id"=>"18"}}
  [1m[35mProject Load (0.2ms)[0m  SELECT `projects`.* FROM `projects` WHERE `projects`.`id` = 18 LIMIT 1
  [1m[36m (0.1ms)[0m  [1mBEGIN[0m
  [1m[35mSQL (1.2ms)[0m  INSERT INTO `images` (`caption`, `carimage`, `created_at`, `proj_photo_content_type`, `proj_photo_file_name`, `proj_photo_file_size`, `proj_photo_updated_at`, `project_id`, `updated_at`) VALUES (NULL, 'stroke_holding.jpg', '2011-12-15 01:11:48', NULL, NULL, NULL, NULL, 18, '2011-12-15 01:11:48')
  [1m[36m (1.7ms)[0m  [1mROLLBACK[0m
Completed 500 Internal Server Error in 2635ms

Excon::Errors::MovedPermanently (Expected(200) <=> Actual(301 Moved Permanently)
  request => {:port=>"443", :method=>"PUT", :idempotent=>true, :body=>#<File:/home/ngtv2/activedesigns/public/uploads/tmp/20111214-1911-5354-1557/stroke_holding.jpg>, :headers=>{"Authorization"=>"AWS XXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXX/XXXXXXXXXXXXXXXXXXX=", "x-amz-acl"=>"public-read", "Date"=>"Thu, 15 Dec 2011 01:11:48 +0000", "Content-Type"=>"image/jpeg", "Content-Length"=>64387, "Host"=>"sample.s3-eu-west-1.amazonaws.com:443"}, :host=>"sample.s3-eu-west-1.amazonaws.com", :query=>nil, :connect_timeout=>60, :expects=>200, :read_timeout=>60, :scheme=>"https", :write_timeout=>60, :path=>"/stroke_holding.jpg", :mock=>nil}
  response => #<Excon::Response:0x6eab8c663f18 @body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message><RequestId>2990AE131EF6DCE2</RequestId><Bucket>sample</Bucket><HostId>q+XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX</HostId><Endpoint>s3.amazonaws.com</Endpoint></Error>", @status=301, @headers={"x-amz-id-2"=>"q+XXXXXXXXXXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXX", "Transfer-Encoding"=>"chunked", "Date"=>"Thu, 15 Dec 2011 01:11:49 GMT", "Content-Type"=>"application/xml", "x-amz-request-id"=>"2990AE131EF6DCE2", "Server"=>"AmazonS3", "Connection"=>"close"}>):
  app/controllers/images_controller.rb:37:in `create'

Rendered vendor/bundle/ruby/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.4ms)
Rendered vendor/bundle/ruby/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
Rendered vendor/bundle/ruby/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (4.4ms)

这是我在图像控制器中的第37行:

def create
  @image = Image.new(params[:image])
  if @image.save <--------line 37
    render :json => [@image.to_jq_upload].to_json
  end
end

我也在错误控制台中得到类似的内容:

错误:格式不正确 源文件:https://s3-console-us-standard.console.aws.amazon.com/DeliverHttp 行:1,列:1 源代码: {

enter image description here

配置/初始化/ currierwave.rb

CarrierWave.configure do |config|
    config.fog_credentials = {
        :provider               => 'AWS', 
        :aws_access_key_id      => 'XXXXXXXXXXXXXXXXXXX', 
        :aws_secret_access_key  => 'XXXXXXXXXXXXXXXXXXX', 
        :region                 => 'eu-west-1'  
    }
    config.fog_directory  = 'sample'
    config.s3_bucket = "XXXXXXXXXX"
end 

enter image description here

1 个答案:

答案 0 :(得分:0)

config.fog_directory应该设置为S3上目录的名称(我认为它实际上不是样本)。你得到的错误是因为你使用的是&e-west-1&#39;尝试访问标准端点中的存储区的端点。因此,您应该更改存储桶或更改区域,以便两者都匹配。