Zend S3 Storage Adapter Issue

Hey, all! I’m attempting to connect my Omeka instance to an S3 bucket and keep encountering the same Zend_Http_Client_Adapter_Exception error whenever I attempt to save the file. My issue appears to be similar to this one: http://omeka.org/forums-legacy/topic/zend_http_client_adapter_exception-upload-on-s3/. However, explicitly specifying my (US) bucket doesn’t appear to have any effect on the problem–the same error is returned at the same point in the stack. My configuration is otherwise the same as that described here: http://bavatuesdays.com/setting-up-s3-storage-for-omeka/. Is there something I’m missing? Any help would be greatly appreciated!

Full stack trace:

exception 'Zend_Http_Client_Adapter_Exception' with message 'Error writing request to server' in /home/utweb/utw10742/public_html/application/libraries/Zend/Http/Client/Adapter/Socket.php:303
Stack trace:
#0 /home/utweb/utw10742/public_html/application/libraries/Zend/Http/Client.php(1087): Zend_Http_Client_Adapter_Socket->write('PUT', Object(Zend_Uri_Http), '1.1', Array, Resource id #36)
#1 /home/utweb/utw10742/public_html/application/libraries/Omeka/Http/Client.php(36): Zend_Http_Client->request('PUT')
#2 /home/utweb/utw10742/public_html/application/libraries/Zend/Service/Amazon/S3.php(693): Omeka_Http_Client->request('PUT')
#3 /home/utweb/utw10742/public_html/application/libraries/Zend/Service/Amazon/S3.php(465): Zend_Service_Amazon_S3->_makeRequest('PUT', 'blantonmuseum-c...', NULL, Array, Resource id #36)
#4 /home/utweb/utw10742/public_html/application/libraries/Zend/Service/Amazon/S3.php(541): Zend_Service_Amazon_S3->putObject('blantonmuseum-c...', Resource id #36, Array)
#5 /home/utweb/utw10742/public_html/application/libraries/Omeka/Storage/Adapter/ZendS3.php(97): Zend_Service_Amazon_S3->putFileStream('/tmp/9a8dab05c0...', 'blantonmuseum-c...', Array)
#6 [internal function]: Omeka_Storage_Adapter_ZendS3->store('/tmp/9a8dab05c0...', 'original/9a8dab...')
#7 /home/utweb/utw10742/public_html/application/libraries/Omeka/Storage.php(67): call_user_func_array(Array, Array)
#8 /home/utweb/utw10742/public_html/application/models/File.php(424): Omeka_Storage->__call('store', Array)
#9 /home/utweb/utw10742/public_html/application/models/File.php(424): Omeka_Storage->store('/tmp/9a8dab05c0...', 'original/9a8dab...')
#10 /home/utweb/utw10742/public_html/application/models/Job/FileProcessUpload.php(23): File->storeFiles()
#11 /home/utweb/utw10742/public_html/application/libraries/Omeka/Job/Dispatcher/Adapter/Synchronous.php(25): Job_FileProcessUpload->perform()
#12 /home/utweb/utw10742/public_html/application/libraries/Omeka/Job/Dispatcher/Default.php(137): Omeka_Job_Dispatcher_Adapter_Synchronous->send('{"className":"J...', Array)
#13 /home/utweb/utw10742/public_html/application/models/File.php(203): Omeka_Job_Dispatcher_Default->send('Job_FileProcess...', Array)
#14 [internal function]: File->afterSave(Array)
#15 /home/utweb/utw10742/public_html/application/libraries/Omeka/Record/AbstractRecord.php(280): call_user_func(Array, Array)
#16 /home/utweb/utw10742/public_html/application/libraries/Omeka/Record/AbstractRecord.php(548): Omeka_Record_AbstractRecord->runCallbacks('afterSave', Array)
#17 /home/utweb/utw10742/public_html/application/models/Item.php(336): Omeka_Record_AbstractRecord->save()
#18 /home/utweb/utw10742/public_html/application/models/Builder/Item.php(203): Item->saveFiles()
#19 /home/utweb/utw10742/public_html/application/libraries/globals.php(567): Builder_Item->addFiles('Upload', 'file', Array)
#20 /home/utweb/utw10742/public_html/application/models/Item.php(321): insert_files_for_item(Object(Item), 'Upload', 'file', Array)
#21 /home/utweb/utw10742/public_html/application/models/Item.php(231): Item->_uploadFiles()
#22 [internal function]: Item->beforeSave(Array)
#23 /home/utweb/utw10742/public_html/application/libraries/Omeka/Record/AbstractRecord.php(280): call_user_func(Array, Array)
#24 /home/utweb/utw10742/public_html/application/libraries/Omeka/Record/AbstractRecord.php(529): Omeka_Record_AbstractRecord->runCallbacks('beforeSave', Array)
#25 /home/utweb/utw10742/public_html/application/libraries/Omeka/Controller/AbstractActionController.php(229): Omeka_Record_AbstractRecord->save(false)
#26 /home/utweb/utw10742/public_html/application/controllers/ItemsController.php(88): Omeka_Controller_AbstractActionController->editAction()
#27 /home/utweb/utw10742/public_html/application/libraries/Zend/Controller/Action.php(516): ItemsController->editAction()
#28 /home/utweb/utw10742/public_html/application/libraries/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch('editAction')
#29 /home/utweb/utw10742/public_html/application/libraries/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#30 /home/utweb/utw10742/public_html/application/libraries/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()
#31 /home/utweb/utw10742/public_html/application/libraries/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()
#32 /home/utweb/utw10742/public_html/application/libraries/Omeka/Application.php(73): Zend_Application->run()
#33 /home/utweb/utw10742/public_html/admin/index.php(28): Omeka_Application->run()
#34 {main}

We’ve heard of problems before on people trying to use newer regions which don’t support all the old methods of access/authentication that the older ones do.

A community member created a plugin that uses the Amazon AWS SDK for S3 rather than the Zend Framework code that the Omeka core uses. For this particular user, it solved their problem.

Otherwise, are you sure you’re using the correct endpoint URL? Typically what you want to put there is a URL based on the AWS region your bucket is hosted in. If your region in Amazon’s list says it supports “Versions 2 and 4” signatures then Omeka’s built-in code should work. If it’s “Versions 4 only” then the plugin would be required.

Thanks for the reply! It was indeed the AWS region that was causing the trouble–my bucket was in a “Version 4 only” region, and when I switched to a new bucket everything worked as advertised. And there was much rejoicing. Thanks again!