I am trying to implement the multiple uploading to Amazon S3 https://github.com/jnicklas/carrierwave/blob/master/README.md (under Using Amazon S3)
But I got an error inside the log file:
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)
Here is my line 37 in images controller:
def create
@image = Image.new(params[:image])
if @image.save <--------line 37
render :json => [@image.to_jq_upload].to_json
end
end
I also get something like this in error console:
Error: not well-formed Source File: https://s3-console-us-standard.console.aws.amazon.com/DeliverHttp Line: 1, Column: 1 Source Code: {
config/initializers/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
The config.fog_directory should be set to the name of the directory on S3 (which I presume is not actually sample). The error you are getting is because you are using the 'eu-west-1' endpoint to try and access a bucket that is in the standard endpoint. So you should either change buckets or change regions, so that both will match.