У меня есть веб-сайт rails 3.0.3, который в режиме разработки отвечает на HTTP-запрос GET, вызывая didReceiveData, а затем connectionDidFinishLoading, и данные фотографий отправляются с веб-сайта на iPhone и отображаются правильно. Но когда я запускаю веб-сайт rails 3.0.3 в производственном режиме на веб-сервисах Amazon, connectionDidFinishLoading вызывается раньше, чем didReceiveData. Я использую carrierwave для обработки фотографий для сайтов разработки и производства.
Кто-нибудь знает, что может вызвать вызывание connectionDidFinishLoading перед didReceiveData?
Я пытался проверить следующее:
1) Я убедился, что NSURLConnectionDelegate вызывается для интерфейса класса.
2) didReceiveResponse не вызывается до connectionDidFinishLoading и statusCode = 200.
3) В приложении rails я использую send_file для отправки данных фотографии, а путь к файлу, отправленному в производство, является реальной фотографией.
4) Проверка с полным запросом к веб-сайту показала, что с производственного веб-сайта возвращалось 0 байт данных с использованием приведенного ниже кода в connectionDidFinishLoading (это стало причиной того, что didReceiveData не вызывался):
NSData *returnedData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://production_website"]];
Вот код для didReceiveData:
// theConnectionData is an instance variable defined as:
NSMutableData *theConnectionData = [[NSMutableData data] retain];
-(void)connection:(NSURLConnection *)con didReceiveData: (NSData *)data {
[theConnectionData appendData:data ];
}
Обновление - Я думаю, что проблема может быть на стороне рельсов. Вот код, который я использую для отправки фотографии из приложения rails из локального хранилища на AWS в приложение iPhone:
@p = Photo.find_by_user_id(user_id)
uploader = @p.avatar
uploader.retrieve_from_store!(File.basename(@p.avatar.url))
uploader.cache_stored_file!
send_file(uploader.file.path,
:disposition => 'inline',
:encoding => 'binary',
:type => @p.content_type,
:stream => false,
:filename => URI.encode(@p.filename),
:x_sendfile => true,
:buffer_size => 16384
)
Кто-нибудь имеет представление о том, почему ReceptionData не вызывается до подключения ConnectionDidFinishLoading для веб-сайта производства рельсов?